mirror of
https://github.com/holub/mame
synced 2025-05-23 22:20:01 +03:00
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:
parent
e0a73faa0c
commit
c88f346827
@ -199,16 +199,33 @@ static MACHINE_START( cdi )
|
|||||||
scc68070_register_globals(machine, &state->scc68070_regs);
|
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 )
|
static DRIVER_INIT( quizrd12 )
|
||||||
{
|
{
|
||||||
scc68070_set_hack_base(0x26F39C);
|
scc68070_set_hack_base(0x26F39C);
|
||||||
scc68070_set_hack_value(0x021f);
|
scc68070_set_hack_value(0x021f);
|
||||||
|
scc68070_set_hack_ack(0x5a);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DRIVER_INIT( quizrd17 )
|
static DRIVER_INIT( quizrd17 )
|
||||||
{
|
{
|
||||||
scc68070_set_hack_base(0x264C42);
|
scc68070_set_hack_base(0x264C42);
|
||||||
scc68070_set_hack_value(0x021f);
|
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 )
|
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 )
|
GAME( 1991, cdi, 0, cdi, cdi, 0, ROT0, "Philips", "CD-i (Mono-I) BIOS", GAME_IS_BIOS_ROOT )
|
||||||
|
|
||||||
// Non-working
|
// 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, 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, 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
|
// 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 )
|
GAME( 1995, quizrd17, cdi, cdi, cdi, quizrd17, ROT0, "TAB Austria", "Quizard 1.7", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
|
||||||
|
@ -35,7 +35,7 @@ public:
|
|||||||
|
|
||||||
#define VERBOSE_LEVEL (5)
|
#define VERBOSE_LEVEL (5)
|
||||||
|
|
||||||
#define ENABLE_VERBOSE_LOG (0)
|
#define ENABLE_VERBOSE_LOG (1)
|
||||||
|
|
||||||
#define ENABLE_UART_PRINTING (0)
|
#define ENABLE_UART_PRINTING (0)
|
||||||
|
|
||||||
|
@ -62,6 +62,18 @@ static void scc68070_set_timer_callback(scc68070_regs_t *scc68070, int channel)
|
|||||||
static bool hack_active = false;
|
static bool hack_active = false;
|
||||||
static UINT16 hack_value = 0;
|
static UINT16 hack_value = 0;
|
||||||
static UINT32 hack_base = 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)
|
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 + 0x24, 0x203C);
|
||||||
space->write_word(hack_base + 0x26, 0x0000);
|
space->write_word(hack_base + 0x26, 0x0000);
|
||||||
space->write_word(hack_base + 0x28, hack_value);
|
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_tx(space->machine, scc68070, data & 0x00ff);
|
||||||
scc68070->uart.transmit_holding_register = 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++;
|
count++;
|
||||||
if(count == 2)
|
if(count == 2)
|
||||||
@ -678,7 +697,6 @@ WRITE16_HANDLER( scc68070_periphs_w )
|
|||||||
|
|
||||||
for(int index = 0; index < 9; index++)
|
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]);
|
scc68070_uart_rx(space->machine, scc68070, check_array[index]);
|
||||||
if(index > 0)
|
if(index > 0)
|
||||||
{
|
{
|
||||||
@ -691,6 +709,10 @@ WRITE16_HANDLER( scc68070_periphs_w )
|
|||||||
quizard_patch(space->machine);
|
quizard_patch(space->machine);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
count = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -238,11 +238,15 @@ extern READ16_HANDLER( scc68070_periphs_r );
|
|||||||
extern WRITE16_HANDLER( scc68070_periphs_w );
|
extern WRITE16_HANDLER( scc68070_periphs_w );
|
||||||
//extern READ16_HANDLER( uart_loopback_enable );
|
//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_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_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_uart_tx(running_machine *machine, scc68070_regs_t *scc68070, UINT8 data);
|
||||||
extern void scc68070_register_globals(running_machine *machine, scc68070_regs_t *scc68070);
|
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_
|
#endif // _MACHINE_CDI070_H_
|
||||||
|
Loading…
Reference in New Issue
Block a user