mirror of
https://github.com/holub/mame
synced 2025-05-21 21:29:15 +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);
|
||||
}
|
||||
|
||||
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 )
|
||||
|
@ -35,7 +35,7 @@ public:
|
||||
|
||||
#define VERBOSE_LEVEL (5)
|
||||
|
||||
#define ENABLE_VERBOSE_LOG (0)
|
||||
#define ENABLE_VERBOSE_LOG (1)
|
||||
|
||||
#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 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
|
||||
{
|
||||
|
@ -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_
|
||||
|
Loading…
Reference in New Issue
Block a user