mirror of
https://github.com/holub/mame
synced 2025-05-19 20:29:09 +03:00
Return x/y values to collision detection routines, helps for Legionnaire and Godzilla, no whatsnew
This commit is contained in:
parent
c44b246954
commit
73a9b487b0
@ -1477,7 +1477,7 @@ static void copd2_set_tabledata(running_machine *machine, UINT16 data)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static UINT32 cop_register[6];
|
static UINT32 cop_register[8];
|
||||||
static UINT16 seibu_vregs[0x50/2];
|
static UINT16 seibu_vregs[0x50/2];
|
||||||
|
|
||||||
static WRITE16_HANDLER( seibu_common_video_regs_w )
|
static WRITE16_HANDLER( seibu_common_video_regs_w )
|
||||||
@ -1953,7 +1953,7 @@ READ16_HANDLER( raiden2_cop2_r )
|
|||||||
|
|
||||||
static UINT16 cop_status,cop_dist,cop_angle;
|
static UINT16 cop_status,cop_dist,cop_angle;
|
||||||
static UINT16 cop_hit_status,cop_hit_internal_status;
|
static UINT16 cop_hit_status,cop_hit_internal_status;
|
||||||
static UINT32 cop_hit_val;
|
static UINT32 cop_hit_val_x,cop_hit_val_y;
|
||||||
static UINT32 cop_sort_lookup,cop_sort_ram_addr,cop_sort_param;
|
static UINT32 cop_sort_lookup,cop_sort_ram_addr,cop_sort_param;
|
||||||
|
|
||||||
static const UINT8 fade_table[0x400] = {
|
static const UINT8 fade_table[0x400] = {
|
||||||
@ -2037,15 +2037,26 @@ static READ16_HANDLER( generic_cop_r )
|
|||||||
|
|
||||||
switch (offset)
|
switch (offset)
|
||||||
{
|
{
|
||||||
|
/* DMA mode register readback */
|
||||||
|
case 0x07e/2:
|
||||||
|
return retvalue;
|
||||||
|
|
||||||
case 0x180/2:
|
case 0x180/2:
|
||||||
return cop_hit_status;
|
return cop_hit_status;
|
||||||
|
|
||||||
/* these two controls facing direction in Godzilla opponents (only vs.)*/
|
/* these two controls facing direction in Godzilla opponents (only vs.) - x value compare? */
|
||||||
case 0x182/2:
|
|
||||||
return (cop_hit_val & 0xffff0000) >> 16;
|
|
||||||
|
|
||||||
case 0x184/2:
|
case 0x184/2:
|
||||||
return cop_hit_val & 0xffff;
|
return (cop_hit_val_x & 0xffff0000) >> 16;
|
||||||
|
|
||||||
|
case 0x182/2:
|
||||||
|
return cop_hit_val_x & 0xffff;
|
||||||
|
|
||||||
|
/* Legionnaire only - y value compare? */
|
||||||
|
case 0x188/2:
|
||||||
|
return (cop_hit_val_y & 0xffff0000) >> 16;
|
||||||
|
|
||||||
|
case 0x186/2:
|
||||||
|
return cop_hit_val_y & 0xffff;
|
||||||
|
|
||||||
/* BCD */
|
/* BCD */
|
||||||
case 0x190/2:
|
case 0x190/2:
|
||||||
@ -2189,6 +2200,13 @@ static WRITE16_HANDLER( generic_cop_w )
|
|||||||
case (0x0a8/2): { cop_register[4] = (cop_register[4]&0x0000ffff)|(cop_mcu_ram[offset]<<16); break; }
|
case (0x0a8/2): { cop_register[4] = (cop_register[4]&0x0000ffff)|(cop_mcu_ram[offset]<<16); break; }
|
||||||
case (0x0c8/2): { cop_register[4] = (cop_register[4]&0xffff0000)|(cop_mcu_ram[offset]<<0); break; }
|
case (0x0c8/2): { cop_register[4] = (cop_register[4]&0xffff0000)|(cop_mcu_ram[offset]<<0); break; }
|
||||||
|
|
||||||
|
case (0x0aa/2): { cop_register[5] = (cop_register[5]&0x0000ffff)|(cop_mcu_ram[offset]<<16); break; }
|
||||||
|
case (0x0ca/2): { cop_register[5] = (cop_register[5]&0xffff0000)|(cop_mcu_ram[offset]<<0); break; }
|
||||||
|
|
||||||
|
case (0x0ac/2): { cop_register[6] = (cop_register[6]&0x0000ffff)|(cop_mcu_ram[offset]<<16); break; }
|
||||||
|
case (0x0cc/2): { cop_register[6] = (cop_register[6]&0xffff0000)|(cop_mcu_ram[offset]<<0); break; }
|
||||||
|
|
||||||
|
|
||||||
case (0x100/2):
|
case (0x100/2):
|
||||||
case (0x102/2):
|
case (0x102/2):
|
||||||
case (0x104/2):
|
case (0x104/2):
|
||||||
@ -2196,7 +2214,7 @@ static WRITE16_HANDLER( generic_cop_w )
|
|||||||
int i;
|
int i;
|
||||||
int command;
|
int command;
|
||||||
|
|
||||||
seibu_cop_log("%06x: COPX execute table macro command %04x %04x | regs %08x %08x %08x %08x %08x\n", cpu_get_pc(space->cpu), data, cop_mcu_ram[offset], cop_register[0], cop_register[1], cop_register[2], cop_register[3], cop_register[4]);
|
//seibu_cop_log("%06x: COPX execute table macro command %04x %04x | regs %08x %08x %08x %08x %08x\n", cpu_get_pc(space->cpu), data, cop_mcu_ram[offset], cop_register[0], cop_register[1], cop_register[2], cop_register[3], cop_register[4]);
|
||||||
|
|
||||||
command = -1;
|
command = -1;
|
||||||
/* search the uploaded 'trigger' table for a matching trigger*/
|
/* search the uploaded 'trigger' table for a matching trigger*/
|
||||||
@ -2205,7 +2223,7 @@ static WRITE16_HANDLER( generic_cop_w )
|
|||||||
{
|
{
|
||||||
if (cop_mcu_ram[offset]==copd2_table_4[i])
|
if (cop_mcu_ram[offset]==copd2_table_4[i])
|
||||||
{
|
{
|
||||||
seibu_cop_log(" Cop Command %04x found in slot %02x with other params %04x %04x\n", cop_mcu_ram[offset], i, copd2_table_2[i], copd2_table_3[i]);
|
//seibu_cop_log(" Cop Command %04x found in slot %02x with other params %04x %04x\n", cop_mcu_ram[offset], i, copd2_table_2[i], copd2_table_3[i]);
|
||||||
|
|
||||||
u1 = copd2_table_2[i] & 0x000f;
|
u1 = copd2_table_2[i] & 0x000f;
|
||||||
u2 = copd2_table_3[i] & 0xffff;
|
u2 = copd2_table_3[i] & 0xffff;
|
||||||
@ -2215,19 +2233,19 @@ static WRITE16_HANDLER( generic_cop_w )
|
|||||||
|
|
||||||
if (command==-1)
|
if (command==-1)
|
||||||
{
|
{
|
||||||
seibu_cop_log(" Cop Command %04x NOT IN TABLE!\n", cop_mcu_ram[offset]);
|
//seibu_cop_log(" Cop Command %04x NOT IN TABLE!\n", cop_mcu_ram[offset]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int j;
|
//int j;
|
||||||
command*=0x8;
|
command*=0x8;
|
||||||
seibu_cop_log(" Sequence: ");
|
//seibu_cop_log(" Sequence: ");
|
||||||
for (j=0;j<0x8;j++)
|
//for (j=0;j<0x8;j++)
|
||||||
{
|
//{
|
||||||
seibu_cop_log("%04x ", copd2_table[command+j]);
|
// seibu_cop_log("%04x ", copd2_table[command+j]);
|
||||||
}
|
//}
|
||||||
seibu_cop_log("\n");
|
//seibu_cop_log("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
//printf("%04x %04x %04x\n",cop_mcu_ram[offset],u1,u2);
|
//printf("%04x %04x %04x\n",cop_mcu_ram[offset],u1,u2);
|
||||||
@ -2355,9 +2373,11 @@ static WRITE16_HANDLER( generic_cop_w )
|
|||||||
/* note: these four are bad! */
|
/* note: these four are bad! */
|
||||||
if(COP_CMD(0xb80,0xb82,0xb84,0xb86,0x000,0x000,0x000,0x000,0,0xffff))
|
if(COP_CMD(0xb80,0xb82,0xb84,0xb86,0x000,0x000,0x000,0x000,0,0xffff))
|
||||||
{
|
{
|
||||||
int dy = space->read_dword(cop_register[1]+4) - space->read_dword(cop_register[0]+4);
|
int dy = space->read_dword(cop_register[0]+4) - space->read_dword(cop_register[1]+4);
|
||||||
int hb = space->read_dword(cop_register[3]) - space->read_dword(cop_register[2]);
|
int hb = space->read_dword(cop_register[3]) - space->read_dword(cop_register[2]);
|
||||||
|
|
||||||
|
cop_hit_val_y = dy;
|
||||||
|
|
||||||
if(dy <= (hb))
|
if(dy <= (hb))
|
||||||
cop_hit_internal_status &= ~1;
|
cop_hit_internal_status &= ~1;
|
||||||
else
|
else
|
||||||
@ -2371,7 +2391,7 @@ static WRITE16_HANDLER( generic_cop_w )
|
|||||||
//(heatbrl) | 9 | ffff | b080 | b40 bc0 bc2
|
//(heatbrl) | 9 | ffff | b080 | b40 bc0 bc2
|
||||||
if(COP_CMD(0xb40,0xbc0,0xbc2,0x000,0x000,0x000,0x000,0x000,9,0xffff))
|
if(COP_CMD(0xb40,0xbc0,0xbc2,0x000,0x000,0x000,0x000,0x000,9,0xffff))
|
||||||
{
|
{
|
||||||
int dy = space->read_dword(cop_register[1]+4) - space->read_dword(cop_register[0]+4);
|
int dy = space->read_dword(cop_register[0]+4) - space->read_dword(cop_register[1]+4);
|
||||||
|
|
||||||
if(dy >= 0)
|
if(dy >= 0)
|
||||||
cop_hit_internal_status &= ~2;
|
cop_hit_internal_status &= ~2;
|
||||||
@ -2385,9 +2405,11 @@ static WRITE16_HANDLER( generic_cop_w )
|
|||||||
|
|
||||||
if(COP_CMD(0xba0,0xba2,0xba4,0xba6,0x000,0x000,0x000,0x000,15,0xffff))
|
if(COP_CMD(0xba0,0xba2,0xba4,0xba6,0x000,0x000,0x000,0x000,15,0xffff))
|
||||||
{
|
{
|
||||||
int dx = space->read_dword(cop_register[1]+8) - space->read_dword(cop_register[0]+8);
|
int dx = space->read_dword(cop_register[0]+8) - space->read_dword(cop_register[1]+8);
|
||||||
int hb = space->read_dword(cop_register[3]) - space->read_dword(cop_register[2]);
|
int hb = space->read_dword(cop_register[3]) - space->read_dword(cop_register[2]);
|
||||||
|
|
||||||
|
cop_hit_val_x = dx;
|
||||||
|
|
||||||
if(dx <= (hb))
|
if(dx <= (hb))
|
||||||
cop_hit_internal_status &= ~4;
|
cop_hit_internal_status &= ~4;
|
||||||
else
|
else
|
||||||
@ -2401,12 +2423,13 @@ static WRITE16_HANDLER( generic_cop_w )
|
|||||||
//(heatbrl) | 6 | ffff | b880 | b60 be0 be2
|
//(heatbrl) | 6 | ffff | b880 | b60 be0 be2
|
||||||
if(COP_CMD(0xb60,0xbe0,0xbe2,0x000,0x000,0x000,0x000,0x000,6,0xffff))
|
if(COP_CMD(0xb60,0xbe0,0xbe2,0x000,0x000,0x000,0x000,0x000,6,0xffff))
|
||||||
{
|
{
|
||||||
int dx = space->read_dword(cop_register[1]+8) - space->read_dword(cop_register[0]+8);
|
int dx = space->read_dword(cop_register[0]+8) - space->read_dword(cop_register[1]+8);
|
||||||
|
|
||||||
//printf("4: %08x %08x\n",dx_0,dx_1);
|
//printf("4: %08x %08x\n",dx_0,dx_1);
|
||||||
|
|
||||||
//if((space->read_word(cop_register[3]) & 0xff00) == 0x0600)
|
//if((space->read_word(cop_register[3]) & 0xff00) == 0x0600)
|
||||||
popmessage("%04x %04x %04x %04x %04x %04x %08x %08x\n",space->read_word(cop_register[0]+4),space->read_word(cop_register[0]+8),space->read_word(cop_register[1]+4),space->read_word(cop_register[1]+8),space->read_word(cop_register[2]),space->read_word(cop_register[3]),cop_register[2],cop_register[3]);
|
// popmessage("%04x %04x %04x %04x %04x %04x %08x %08x\n",space->read_word(cop_register[0]+4),space->read_word(cop_register[0]+8),space->read_word(cop_register[1]+4),space->read_word(cop_register[1]+8),space->read_word(cop_register[2]),space->read_word(cop_register[3]),cop_register[2],cop_register[3]);
|
||||||
|
popmessage("%08x %08x",cop_hit_val_x,cop_hit_val_y);
|
||||||
|
|
||||||
if(dx >= 0)
|
if(dx >= 0)
|
||||||
cop_hit_internal_status &= ~8;
|
cop_hit_internal_status &= ~8;
|
||||||
@ -2454,7 +2477,7 @@ static WRITE16_HANDLER( generic_cop_w )
|
|||||||
|
|
||||||
for(i = 0;i < size;i++)
|
for(i = 0;i < size;i++)
|
||||||
{
|
{
|
||||||
static UINT32 pal_val;
|
static UINT16 pal_val;
|
||||||
int r,g,b;
|
int r,g,b;
|
||||||
int rt,gt,bt;
|
int rt,gt,bt;
|
||||||
|
|
||||||
@ -2479,7 +2502,7 @@ static WRITE16_HANDLER( generic_cop_w )
|
|||||||
}
|
}
|
||||||
else if(pal_brightness_mode == 4) //Denjin Makai, TODO
|
else if(pal_brightness_mode == 4) //Denjin Makai, TODO
|
||||||
{
|
{
|
||||||
pal_val = space->read_word(src);
|
pal_val = space->read_word(src + (cop_dma_fade_table * 0x400));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2768,12 +2791,19 @@ WRITE16_HANDLER( cupsocs_mcu_w )
|
|||||||
{
|
{
|
||||||
COMBINE_DATA(&cop_mcu_ram[offset]);
|
COMBINE_DATA(&cop_mcu_ram[offset]);
|
||||||
|
|
||||||
if(offset >= 0x240/2 && offset <= 0x28f/2)
|
if(offset >= 0x240/2 && offset <= 0x27f/2)
|
||||||
{
|
{
|
||||||
seibu_common_video_regs_w(space,offset-0x240/2,cop_mcu_ram[offset],mem_mask);
|
seibu_common_video_regs_w(space,offset-0x240/2,cop_mcu_ram[offset],mem_mask);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(offset >= 0x200/2 && offset <= 0x20f/2)
|
||||||
|
{
|
||||||
|
seibu_common_video_regs_w(space,(offset-0x200/2)+(0x40/2),cop_mcu_ram[offset],mem_mask);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (offset)
|
switch (offset)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user