0x6200 note, nw

This commit is contained in:
Angelo Salese 2012-09-18 22:12:17 +00:00
parent 0f81674c61
commit bc09e31613

View File

@ -1527,8 +1527,68 @@ dx dy | stat dist angle scale r34(r) r36 r38* r3a
0x00 0x00 | 0x0067 0x10 0x2d 0x0000 0x0001 0x0020 0xb5 0x0b50
*same as 0x3bb0
command 0x6200
raw angle|angle compare|angle mod value| res |
---------|-------------|---------------|-----|
0x00 **** 0x00 0x00
0x00 0x00 0x20 0x00
0x00 0x20 0x20 0x20
0x00 0x40 0x20 0x20
0x00 0x60 0x20 0x20
0x00 0x80 0x20 0xe0
0x00 0xa0 0x20 0xe0
0x00 0xc0 0x20 0xe0
0x00 0xe0 0x20 0xe0
0x00 0x00 0x40 0x00
0x00 0x20 0x40 0x20
0x00 0x40 0x40 0x40
0x00 0x60 0x40 0x40
0x00 0x80 0x40 0xc0
0x00 0xa0 0x40 0xc0
0x00 0xc0 0x40 0xc0
0x00 0xe0 0x40 0xe0
0x00 0x00 0x60 0x00
0x00 0x20 0x60 0x20
0x00 0x40 0x60 0x60 *
0x00 0x60 0x60 0x60
0x00 0x80 0x60 0xa0
0x00 0xa0 0x60 0xa0
0x00 0xc0 0x60 0xc0
0x00 0xe0 0x60 0xe0
0x00 0x00 0x80 0x00
0x00 0x20 0x80 0x80 *
0x00 0x40 0x80 0x80 *
0x00 0x60 0x80 0x80 *
0x00 0x80 0x80 0x80 *
0x00 0xa0 0x80 0x80
0x00 0xc0 0x80 0x80
0x00 0xe0 0x80 0x80
0x00 0x00 0xa0 0x00
0x00 0x20 0xa0 0x20
0x00 0x40 0xa0 0xa0
0x00 0x60 0xa0 0xa0
0x00 0x80 0xa0 0x60
0x00 0xa0 0xa0 0x60
0x00 0xc0 0xa0 0x60
0x00 0xe0 0xa0 0xe0
0x00 0x00 0xc0 0x00
0x00 0x20 0xc0 0x20
0x00 0x40 0xc0 0xc0
0x00 0x60 0xc0 ****
0x00 0x80 0xc0 0x40
0x00 0xa0 0xc0 ****
0x00 0xc0 0xc0 0xc0
0x00 0xe0 0xc0 0xe0
0x00 0x00 0xe0 0x00
0x00 0x20 0xe0 0x20
0x00 0x40 0xe0 0xe0
0x00 0x60 0xe0 0xe0
0x00 0x80 0xe0 0x20
0x00 0xa0 0xe0 0x20
0x00 0xc0 0xe0 0xc0
0x00 0xe0 0xe0 0xe0
*/
#include "emu.h"
@ -1868,7 +1928,7 @@ static UINT16 cop_hit_status;
static INT16 cop_hit_val_x,cop_hit_val_y,cop_hit_val_z,cop_hit_val_unk;
static UINT32 cop_sort_lookup,cop_sort_ram_addr,cop_sort_param;
static INT8 cop_angle_compare;
static UINT8 cop_angle_mod_val;
static INT8 cop_angle_mod_val;
static struct
{
int x,y;
@ -2091,8 +2151,8 @@ static WRITE16_HANDLER( generic_cop_w )
break;
/* triggered before 0x6200 in Seibu Cup, looks like an angle value ... */
case (0x01c/2): cop_angle_compare = cop_mcu_ram[0x1c/2] & 0xff; break;
case (0x01e/2): cop_angle_mod_val = cop_mcu_ram[0x1e/2] & 0xff; break;
case (0x01c/2): cop_angle_compare = INT8(cop_mcu_ram[0x1c/2]); break;
case (0x01e/2): cop_angle_mod_val = INT8(cop_mcu_ram[0x1e/2]); break;
case (0x08c/2): cop_sprite_dma_abs_y = (cop_mcu_ram[0x08c/2]); break;
case (0x08e/2): cop_sprite_dma_abs_x = (cop_mcu_ram[0x08e/2]); break;
@ -2658,28 +2718,32 @@ static WRITE16_HANDLER( generic_cop_w )
{
INT8 cur_angle;
cur_angle = space.read_byte(cop_register[0] + (0x34 ^ 3));
cur_angle = INT8(space.read_byte(cop_register[0] + (0x34 ^ 3)));
//space.write_byte(cop_register[0] + (0^3),space.read_byte(cop_register[0] + (0^3)) & 0xfb); //correct?
/*
0x00 0x00 0x60 0x00
0x00 0x20 0x60 0x20
0x00 0x40 0x60 0x60
0x00 0x60 0x60 0x60
0x00 0x80 0x60 0xa0
0x00 0xa0 0x60 0xa0
0x00 0xc0 0x60 0xc0
0x00 0xe0 0x60 0xe0
*/
if(cur_angle >= cop_angle_compare)
if(cur_angle > cop_angle_compare)
{
cur_angle -= cop_angle_mod_val;
if(cur_angle <= cop_angle_compare)
{
if(cur_angle < cop_angle_compare)
cur_angle = cop_angle_compare;
//space.write_byte(cop_register[0] + (0^3),space.read_byte(cop_register[0] + (0^3)) | 2);
}
}
else if(cur_angle <= cop_angle_compare)
else if(cur_angle < cop_angle_compare)
{
cur_angle += cop_angle_mod_val;
if(cur_angle >= cop_angle_compare)
{
if(cur_angle > cop_angle_compare)
cur_angle = cop_angle_compare;
//space.write_byte(cop_register[0] + (0^3),space.read_byte(cop_register[0] + (0^3)) | 2);
}
}
space.write_byte(cop_register[0] + (0x34 ^ 3),cur_angle);