mirror of
https://github.com/holub/mame
synced 2025-05-21 21:29:15 +03:00
More protection progress: no more game specific program counter checks
This commit is contained in:
parent
8f89267309
commit
a4235eae52
@ -416,6 +416,8 @@ static MACHINE_START( s2650 )
|
||||
state->hunchloopback = 0;
|
||||
|
||||
state_save_register_global(machine, state->hunchloopback);
|
||||
state_save_register_global(machine, state->prot_cnt);
|
||||
state_save_register_global(machine, state->main_fo);
|
||||
|
||||
if (strcmp(game_name,"herbiedk") == 0) state->protect_type = DK2650_HERBIEDK;
|
||||
else if (strcmp(game_name,"hunchbkd") == 0) state->protect_type = DK2650_HUNCHBKD;
|
||||
@ -636,7 +638,6 @@ static READ8_HANDLER( epos_decrypt_rom )
|
||||
|
||||
static WRITE8_HANDLER( s2650_data_w )
|
||||
{
|
||||
/* FIXME: move to AM_BASE_MEMBER */
|
||||
dkong_state *state = (dkong_state *)space->machine->driver_data;
|
||||
#if DEBUG_PROTECTION
|
||||
logerror("write : pc = %04x, loopback = %02x\n",cpu_get_pc(space->cpu), data);
|
||||
@ -647,37 +648,37 @@ static WRITE8_HANDLER( s2650_data_w )
|
||||
|
||||
static WRITE8_HANDLER( s2650_fo_w )
|
||||
{
|
||||
/* FIXME: move to AM_BASE_MEMBER */
|
||||
dkong_state *state = (dkong_state *)space->machine->driver_data;
|
||||
#if DEBUG_PROTECTION
|
||||
logerror("write : pc = %04x, FO = %02x\n",cpu_get_pc(space->cpu), data);
|
||||
#endif
|
||||
|
||||
state->main_fo = data;
|
||||
|
||||
if (state->main_fo)
|
||||
state->hunchloopback = 0xfb;
|
||||
}
|
||||
|
||||
static READ8_HANDLER( s2650_port0_r )
|
||||
{
|
||||
dkong_state *state = (dkong_state *)space->machine->driver_data;
|
||||
#if DEBUG_PROTECTION
|
||||
logerror("port 0 : pc = %04x, loopback = %02x\n",cpu_get_pc(space->cpu), state->hunchloopback);
|
||||
logerror("port 0 : pc = %04x, loopback = %02x fo=%d\n",cpu_get_pc(space->cpu), state->hunchloopback, state->main_fo);
|
||||
#endif
|
||||
|
||||
switch (COMBINE_TYPE_PC(state->protect_type, cpu_get_pc(space->cpu)))
|
||||
{
|
||||
case COMBINE_TYPE_PC(DK2650_HUNCHBKD, 0x00e9): return 0xff;
|
||||
case COMBINE_TYPE_PC(DK2650_HUNCHBKD, 0x0114): return 0xfb; //fb
|
||||
case COMBINE_TYPE_PC(DK2650_HUNCHBKD, 0x209b): return state->hunchloopback; /* this at least prevents reset after super bonus */
|
||||
case COMBINE_TYPE_PC(DK2650_SHOOTGAL, 0x0079): return 0xff; /* FO related ? */
|
||||
case COMBINE_TYPE_PC(DK2650_SPCLFORC, 0x00a3): return 0x01; /* FO related */
|
||||
//case COMBINE_TYPE_PC(DK2650_SPCLFORC, 0x007b): return 0x01;
|
||||
}
|
||||
|
||||
switch (state->protect_type)
|
||||
{
|
||||
case DK2650_HUNCHBKD: return 0x00;
|
||||
case DK2650_SHOOTGAL: return 0x00;
|
||||
case DK2650_SPCLFORC: return state->hunchloopback; //return 0x00;
|
||||
case DK2650_SHOOTGAL:
|
||||
case DK2650_HUNCHBKD:
|
||||
if (state->main_fo)
|
||||
return state->hunchloopback;
|
||||
else
|
||||
return state->hunchloopback--;
|
||||
case DK2650_SPCLFORC:
|
||||
if (!state->main_fo)
|
||||
return state->hunchloopback;
|
||||
else
|
||||
return state->hunchloopback--;
|
||||
}
|
||||
fatalerror("Unhandled read from port 0 : pc = %4x\n",cpu_get_pc(space->cpu));
|
||||
}
|
||||
@ -686,13 +687,15 @@ static READ8_HANDLER( s2650_port0_r )
|
||||
static READ8_HANDLER( s2650_port1_r )
|
||||
{
|
||||
dkong_state *state = (dkong_state *)space->machine->driver_data;
|
||||
|
||||
#if DEBUG_PROTECTION
|
||||
logerror("port 1 : pc = %04x, loopback = %02x\n",cpu_get_pc(space->cpu), state->hunchloopback);
|
||||
logerror("port 1 : pc = %04x, loopback = %02x fo=%d\n",cpu_get_pc(space->cpu), state->hunchloopback, state->main_fo);
|
||||
#endif
|
||||
|
||||
switch (state->protect_type)
|
||||
{
|
||||
case DK2650_HUNCHBKD: return state->hunchloopback;
|
||||
case DK2650_HUNCHBKD:
|
||||
return state->hunchloopback--;
|
||||
case DK2650_EIGHTACT:
|
||||
case DK2650_HERBIEDK:
|
||||
if (state->hunchloopback & 0x80)
|
||||
@ -763,7 +766,7 @@ static ADDRESS_MAP_START( dkong_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_BASE_MEMBER(dkong_state, video_ram)
|
||||
AM_RANGE(0x7800, 0x780f) AM_DEVREADWRITE("dma8257", dma8257_r, dma8257_w) /* P8257 control registers */
|
||||
AM_RANGE(0x7c00, 0x7c00) AM_READ_PORT("IN0") AM_LATCH8_WRITE("ls175.3d") /* IN0, sound CPU intf */
|
||||
AM_RANGE(0x7c80, 0x7c80) AM_READ_PORT("IN1") AM_WRITE(radarscp_grid_color_w) /* IN1 */
|
||||
AM_RANGE(0x7c80, 0x7c80) AM_READ_PORT("IN1") AM_WRITE(radarscp_grid_color_w)/* IN1 */
|
||||
|
||||
AM_RANGE(0x7d00, 0x7d00) AM_READ(dkong_in2_r) /* IN2 */
|
||||
AM_RANGE(0x7d00, 0x7d07) AM_DEVWRITE("ls259.6h", latch8_bit0_w) /* Sound signals */
|
||||
|
Loading…
Reference in New Issue
Block a user