summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ryan Holtz <rholtz@batcountryentertainment.com>2010-10-11 04:57:21 +0000
committer Ryan Holtz <rholtz@batcountryentertainment.com>2010-10-11 04:57:21 +0000
commitc88f3468271bff428a9d95abd04d9d641fa9b8c6 (patch)
tree5b22d758adde04e7f5d43c50811ba0746adedace
parente0a73faa0c7cd26a9b9fa4fac81b02cf4e29f2de (diff)
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]
-rw-r--r--src/mame/drivers/cdi.c25
-rw-r--r--src/mame/includes/cdi.h2
-rw-r--r--src/mame/machine/cdi070.c26
-rw-r--r--src/mame/machine/cdi070.h8
4 files changed, 53 insertions, 8 deletions
diff --git a/src/mame/drivers/cdi.c b/src/mame/drivers/cdi.c
index efd65ef25ed..1d688d1c97a 100644
--- a/src/mame/drivers/cdi.c
+++ b/src/mame/drivers/cdi.c
@@ -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 )
diff --git a/src/mame/includes/cdi.h b/src/mame/includes/cdi.h
index cbcd15b6ca4..46d01e2d710 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 (0)
+#define ENABLE_VERBOSE_LOG (1)
#define ENABLE_UART_PRINTING (0)
diff --git a/src/mame/machine/cdi070.c b/src/mame/machine/cdi070.c
index c2b1e036387..81d23103bb6 100644
--- a/src/mame/machine/cdi070.c
+++ b/src/mame/machine/cdi070.c
@@ -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
{
diff --git a/src/mame/machine/cdi070.h b/src/mame/machine/cdi070.h
index 3da8a91bd97..85e001ae96f 100644
--- a/src/mame/machine/cdi070.h
+++ b/src/mame/machine/cdi070.h
@@ -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_