mirror of
https://github.com/holub/mame
synced 2025-05-21 21:29:15 +03:00
Haze: Ketsui et al protection cleanups (no whatsnew)
This commit is contained in:
parent
813f420574
commit
8c07f16ecb
@ -1472,6 +1472,7 @@ static MACHINE_CONFIG_DERIVED( cavepgm, pgm )
|
|||||||
|
|
||||||
MDRV_CPU_MODIFY("maincpu")
|
MDRV_CPU_MODIFY("maincpu")
|
||||||
MDRV_CPU_PROGRAM_MAP(cavepgm_mem)
|
MDRV_CPU_PROGRAM_MAP(cavepgm_mem)
|
||||||
|
MDRV_CPU_VBLANK_INT_HACK(drgw_interrupt,2)
|
||||||
|
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
@ -4360,6 +4361,7 @@ static DRIVER_INIT( pstar )
|
|||||||
state_save_register_global(machine, state->pstar_b1);
|
state_save_register_global(machine, state->pstar_b1);
|
||||||
state_save_register_global(machine, state->pstar_ce);
|
state_save_register_global(machine, state->pstar_ce);
|
||||||
state_save_register_global_array(machine, state->pstar_ram);
|
state_save_register_global_array(machine, state->pstar_ram);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static DRIVER_INIT( photoy2k )
|
static DRIVER_INIT( photoy2k )
|
||||||
@ -5394,110 +5396,88 @@ static DRIVER_INIT( kovqhsgs )
|
|||||||
kovsh_latch_init(machine);
|
kovsh_latch_init(machine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* this is based on the puzzle star simulation,
|
||||||
|
at least for how it communicates with the device..
|
||||||
|
|
||||||
|
please don't driver_data this, it's temporary code, and just
|
||||||
|
becomes and absolute pain to work with if bits of it end
|
||||||
|
up all over the place, and near impossible to read with state->
|
||||||
|
before everything.
|
||||||
|
|
||||||
|
*/
|
||||||
|
static UINT16 value0, value1, valuekey;
|
||||||
|
static UINT32 valueresponse;
|
||||||
|
|
||||||
static WRITE16_HANDLER( ddp3_asic_w )
|
static WRITE16_HANDLER( ddp3_asic_w )
|
||||||
{
|
{
|
||||||
int pc = cpu_get_pc(space->cpu);
|
|
||||||
UINT32 address = offset*2 + 0x500000;
|
|
||||||
|
|
||||||
logerror("protection write pc: %5.5x %5.5x %4.4x\n", pc, address, data);
|
if (offset == 0)
|
||||||
|
|
||||||
|
|
||||||
switch (address)
|
|
||||||
{
|
{
|
||||||
case 0x500000:
|
value0 = data;
|
||||||
//
|
|
||||||
return;
|
|
||||||
|
|
||||||
case 0x500002:
|
|
||||||
//
|
|
||||||
return;
|
|
||||||
|
|
||||||
case 0x500004:
|
|
||||||
// if (data == 0) should probably do something... IRQ?
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if (offset == 1)
|
||||||
|
{
|
||||||
|
UINT16 realkey;
|
||||||
|
if ((data >> 8) == 0xff)
|
||||||
|
valuekey = 0xff00;
|
||||||
|
realkey = valuekey >> 8;
|
||||||
|
realkey |= valuekey;
|
||||||
|
{
|
||||||
|
valuekey += 0x0100;
|
||||||
|
valuekey &= 0xff00;
|
||||||
|
if (valuekey == 0xff00)
|
||||||
|
valuekey = 0x0100;
|
||||||
|
}
|
||||||
|
data ^= realkey;
|
||||||
|
value1 = data;
|
||||||
|
value0 ^= realkey;
|
||||||
|
|
||||||
|
int command = value1 & 0xff;
|
||||||
|
|
||||||
|
switch (command)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
printf("command %02x\n", command);
|
||||||
|
valueresponse = 0x880000;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x99: // reset?
|
||||||
|
valuekey = 0x100;
|
||||||
|
valueresponse = 0x00880000;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (offset==2)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
data = data; // kill warnings
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static READ16_HANDLER( ddp3_asic_r )
|
static READ16_HANDLER( ddp3_asic_r )
|
||||||
{
|
{
|
||||||
int pc = cpu_get_pc(space->cpu);
|
|
||||||
unsigned int retdata = 0;
|
|
||||||
|
|
||||||
//printf("pc %08x\n", pc);
|
if (offset == 0)
|
||||||
|
|
||||||
/*
|
|
||||||
pc 1466a8 and 146686 should probably be returning something
|
|
||||||
*/
|
|
||||||
UINT32 address = offset*2 + 0x500000;
|
|
||||||
|
|
||||||
switch (address)
|
|
||||||
{
|
{
|
||||||
case 0x500000:
|
UINT16 d = valueresponse & 0xffff;
|
||||||
{
|
UINT16 realkey = valuekey >> 8;
|
||||||
switch (pc)
|
realkey |= valuekey;
|
||||||
{
|
d ^= realkey;
|
||||||
case 0x1465ee:
|
|
||||||
case 0x146B00: // black label
|
|
||||||
case 0x24704c: // black label
|
|
||||||
retdata = 0x028b; // boot
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x1466a8:
|
return d;
|
||||||
case 0x146BBA: // black label
|
|
||||||
retdata = 0x0000; // data
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x500002:
|
|
||||||
{
|
|
||||||
switch (pc)
|
|
||||||
{
|
|
||||||
case 0x1465a2: // 0xff00
|
|
||||||
case 0x1465cc: // 0x0077
|
|
||||||
case 0x146ab4: // 0xff00 - black label
|
|
||||||
case 0x146ADE: // 0x0077 - black label
|
|
||||||
case 0x247000: // 0xff00 - black label
|
|
||||||
case 0x24702a: // 0x0077 - black label
|
|
||||||
retdata = 0xff77; // boot
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x146686:
|
|
||||||
case 0x146B98: // black label
|
|
||||||
retdata = 0x0000; // data
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x146716: // protection
|
|
||||||
case 0x14665c: // protection
|
|
||||||
case 0x146C28: // protection- black label
|
|
||||||
case 0x146B6E: // protection- black label
|
|
||||||
case 0x247174: // protection- black label
|
|
||||||
case 0x2470ba: // protection- black label
|
|
||||||
retdata = cpu_get_reg(space->cpu, M68K_D5) << 8;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x146740: // protection
|
|
||||||
case 0x146C52: // protection - black label
|
|
||||||
case 0x24719e: // protection - black label
|
|
||||||
retdata = cpu_get_reg(space->cpu, M68K_D5) ^ 0x0088;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
else if (offset == 1)
|
||||||
|
{
|
||||||
|
UINT16 d = valueresponse >> 16;
|
||||||
|
UINT16 realkey = valuekey >> 8;
|
||||||
|
realkey |= valuekey;
|
||||||
|
d ^= realkey;
|
||||||
|
return d;
|
||||||
|
|
||||||
//if (pc != 0x1465ee && pc != 0x1465a2 && pc != 0x1465cc && pc != 0x146716 && pc != 0x146740 && pc != 0x14665c && pc != 0x1466a8 && pc != 0x146686) {
|
}
|
||||||
logerror ("protection read pc: %5.5x %5.5x, ret %4.4x\n", pc, address, retdata);
|
return 0xffff;
|
||||||
//}
|
|
||||||
|
|
||||||
return retdata;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void install_asic27a_ddp3(running_machine* machine)
|
void install_asic27a_ddp3(running_machine* machine)
|
||||||
@ -5505,159 +5485,14 @@ void install_asic27a_ddp3(running_machine* machine)
|
|||||||
memory_install_readwrite16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x500000, 0x500005, 0, 0, ddp3_asic_r, ddp3_asic_w);
|
memory_install_readwrite16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x500000, 0x500005, 0, 0, ddp3_asic_r, ddp3_asic_w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static WRITE16_HANDLER( ket_asic_w )
|
|
||||||
{
|
|
||||||
int pc = cpu_get_pc(space->cpu);
|
|
||||||
UINT32 address = offset*2 + 0x500000;
|
|
||||||
|
|
||||||
logerror("protection write pc: %5.5x %5.5x %4.4x\n", pc, address, data);
|
|
||||||
|
|
||||||
switch (address)
|
|
||||||
{
|
|
||||||
case 0x400000:
|
|
||||||
return;
|
|
||||||
|
|
||||||
case 0x400002:
|
|
||||||
return;
|
|
||||||
|
|
||||||
case 0x400004:
|
|
||||||
// if (data == 0) should probably do something... IRQ?
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
data = data; // kill warnings
|
|
||||||
}
|
|
||||||
|
|
||||||
static READ16_HANDLER( ket_asic_r )
|
|
||||||
{
|
|
||||||
int pc = cpu_get_pc(space->cpu);
|
|
||||||
|
|
||||||
//printf("pc %08x\n", pc);
|
|
||||||
|
|
||||||
UINT32 address = offset*2 + 0x400000;
|
|
||||||
|
|
||||||
|
|
||||||
unsigned int retdata = 0;
|
|
||||||
|
|
||||||
switch (address)
|
|
||||||
{
|
|
||||||
case 0x400000:
|
|
||||||
{
|
|
||||||
switch (pc)
|
|
||||||
{
|
|
||||||
case 0xb2bc0:
|
|
||||||
retdata = 0xffff; // must be > 0x200?
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0xb2c7a:
|
|
||||||
retdata = 0;//xffff; // revisions want values from here...
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x400002:
|
|
||||||
{
|
|
||||||
|
|
||||||
switch (pc)
|
|
||||||
{
|
|
||||||
case 0xb2b74: // 0xff00
|
|
||||||
case 0xb2b9e: // 0x0077
|
|
||||||
retdata = 0xff77;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0xb2c2e:
|
|
||||||
case 0xb2ce8:
|
|
||||||
retdata = cpu_get_reg(space->cpu, M68K_D5) << 8;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0xb2d12:
|
|
||||||
retdata = cpu_get_reg(space->cpu, M68K_D5) ^ 0x0088;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0xb2c58:
|
|
||||||
retdata = 0;//xffff; // revisions want values from here...
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//if (pc != 0xb2ce8 && pc != 0xb2c2e && pc != 0xb2d12) {
|
|
||||||
// logerror ("protection read pc: %5.5x %5.5x, ret %4.4x kovret %4.4x\n"), pc, address, retdata, kovret);
|
|
||||||
//}
|
|
||||||
|
|
||||||
return retdata;
|
|
||||||
}
|
|
||||||
|
|
||||||
void install_asic27a_ket(running_machine* machine)
|
void install_asic27a_ket(running_machine* machine)
|
||||||
{
|
{
|
||||||
memory_install_readwrite16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400000, 0x400005, 0, 0, ket_asic_r, ket_asic_w);
|
memory_install_readwrite16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400000, 0x400005, 0, 0, ddp3_asic_r, ddp3_asic_w);
|
||||||
}
|
|
||||||
|
|
||||||
static READ16_HANDLER( espgal_asic_r )
|
|
||||||
{
|
|
||||||
int pc = cpu_get_pc(space->cpu);
|
|
||||||
|
|
||||||
//printf("pc %08x\n", pc);
|
|
||||||
|
|
||||||
UINT32 address = offset*2 + 0x400000;
|
|
||||||
|
|
||||||
|
|
||||||
unsigned int retdata = 0;
|
|
||||||
switch (address)
|
|
||||||
{
|
|
||||||
case 0x400000:
|
|
||||||
{
|
|
||||||
switch (pc)
|
|
||||||
{
|
|
||||||
case 0x11fe28:
|
|
||||||
retdata = 0x0000; // boot - seems ok with 0??
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x11fee2:
|
|
||||||
retdata = 0x0000; // data
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x400002:
|
|
||||||
{
|
|
||||||
switch (pc)
|
|
||||||
{
|
|
||||||
case 0x11fddc: // 0xff00
|
|
||||||
case 0x11fe06: // 0x0077
|
|
||||||
retdata = 0xff77; // boot
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x11fec0:
|
|
||||||
retdata = 0x0000; // data
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x11fe96: // protection
|
|
||||||
case 0x11ff50: // protection
|
|
||||||
retdata = cpu_get_reg(space->cpu, M68K_D2) << 8;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x11ff7a: // protection
|
|
||||||
retdata = cpu_get_reg(space->cpu, M68K_D5) ^ 0x0088;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return retdata;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void install_asic27a_espgal(running_machine* machine)
|
void install_asic27a_espgal(running_machine* machine)
|
||||||
{
|
{
|
||||||
memory_install_readwrite16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400000, 0x400005, 0, 0, espgal_asic_r, ket_asic_w);
|
memory_install_readwrite16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400000, 0x400005, 0, 0, ddp3_asic_r, ddp3_asic_w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user