trunk/src/mame/machine/raiden2cop.c
| r32371 | r32372 | |
| 1280 | 1280 | 14 - a180 (a100 ) : (b80, b82, b84, b86, 000, 000, 000, 000) 0 02ff (grainbow) |
| 1281 | 1281 | 14 - a100 (a100 ) : (b80, b82, b84, b86, 000, 000, 000, 000) 0 00ff (raiden2, raidendx) |
| 1282 | 1282 | */ |
| 1283 | |
| 1284 | // the last value (ffff / 02ff / 00ff depending on game) might be important here as they've been intentionally changed for the different games |
| 1283 | 1285 | void raiden2cop_device::execute_a100(address_space &space, int offset, UINT16 data) |
| 1284 | 1286 | { |
| 1285 | 1287 | cop_collision_read_pos(space, 0, cop_regs[0], data & 0x0080); |
| 1286 | 1288 | } |
| 1287 | 1289 | |
| 1288 | | void raiden2cop_device::LEGACY_execute_a100(address_space &space, int offset, UINT16 data) |
| 1289 | | { |
| 1290 | | m_LEGACY_cop_collision_info[0].y = (space.read_dword(cop_regs[0] + 4)); |
| 1291 | | m_LEGACY_cop_collision_info[0].x = (space.read_dword(cop_regs[0] + 8)); |
| 1292 | | } |
| 1293 | | |
| 1294 | 1290 | /* |
| 1295 | 1291 | 15 - a900 (a900 ) : (ba0, ba2, ba4, ba6, 000, 000, 000, 000) f ffff (heatbrl, zeroteam, xsedae) |
| 1296 | 1292 | 15 - a980 (a900 ) : (ba0, ba2, ba4, ba6, 000, 000, 000, 000) f ffff (legionna, cupsoc, godzilla, denjinmk) |
| r32371 | r32372 | |
| 1302 | 1298 | cop_collision_read_pos(space, 1, cop_regs[1], data & 0x0080); |
| 1303 | 1299 | } |
| 1304 | 1300 | |
| 1305 | | void raiden2cop_device::LEGACY_execute_a900(address_space &space, int offset, UINT16 data) |
| 1306 | | { |
| 1307 | | m_LEGACY_cop_collision_info[1].y = (space.read_dword(cop_regs[1] + 4)); |
| 1308 | | m_LEGACY_cop_collision_info[1].x = (space.read_dword(cop_regs[1] + 8)); |
| 1309 | | } |
| 1310 | 1301 | |
| 1311 | 1302 | /* |
| 1312 | 1303 | 16 - b080 (b000 ) : (b40, bc0, bc2, 000, 000, 000, 000, 000) 9 ffff (heatbrl) |
| r32371 | r32372 | |
| 1526 | 1517 | void raiden2cop_device::cop_collision_read_pos(address_space &space, int slot, UINT32 spradr, bool allow_swap) |
| 1527 | 1518 | { |
| 1528 | 1519 | cop_collision_info[slot].allow_swap = allow_swap; |
| 1529 | | cop_collision_info[slot].flags_swap = space.read_word(spradr+2); |
| 1520 | cop_collision_info[slot].flags_swap = cop_read_word(space, spradr+2); |
| 1530 | 1521 | cop_collision_info[slot].spradr = spradr; |
| 1531 | 1522 | for(int i=0; i<3; i++) |
| 1532 | | cop_collision_info[slot].pos[i] = space.read_word(spradr+6+4*i); |
| 1523 | cop_collision_info[slot].pos[i] = cop_read_word(space, spradr+6+4*i); |
| 1533 | 1524 | } |
| 1534 | 1525 | |
| 1535 | 1526 | void raiden2cop_device::cop_collision_update_hitbox(address_space &space, int slot, UINT32 hitadr) |
| r32371 | r32372 | |
| 1897 | 1888 | start_x = INT8(m_LEGACY_cop_collision_info[offs].hitbox_x); |
| 1898 | 1889 | } |
| 1899 | 1890 | |
| 1900 | | m_LEGACY_cop_collision_info[offs].min_x = (m_LEGACY_cop_collision_info[offs].x >> 16) + start_x; |
| 1891 | m_LEGACY_cop_collision_info[offs].min_x = (cop_collision_info[offs].pos[1]) + start_x; |
| 1901 | 1892 | m_LEGACY_cop_collision_info[offs].max_x = m_LEGACY_cop_collision_info[offs].min_x + width; |
| 1902 | | m_LEGACY_cop_collision_info[offs].min_y = (m_LEGACY_cop_collision_info[offs].y >> 16) + start_y; |
| 1893 | m_LEGACY_cop_collision_info[offs].min_y = (cop_collision_info[offs].pos[0]) + start_y; |
| 1903 | 1894 | m_LEGACY_cop_collision_info[offs].max_y = m_LEGACY_cop_collision_info[offs].min_y + height; |
| 1904 | 1895 | } |
| 1905 | 1896 | |
| r32371 | r32372 | |
| 1924 | 1915 | if(m_LEGACY_cop_collision_info[1].max_y >= m_LEGACY_cop_collision_info[0].min_y && m_LEGACY_cop_collision_info[1].min_y <= m_LEGACY_cop_collision_info[0].max_y) |
| 1925 | 1916 | res &= ~1; |
| 1926 | 1917 | |
| 1927 | | cop_hit_val[1] = (m_LEGACY_cop_collision_info[0].x - m_LEGACY_cop_collision_info[1].x) >> 16; |
| 1928 | | cop_hit_val[0] = (m_LEGACY_cop_collision_info[0].y - m_LEGACY_cop_collision_info[1].y) >> 16; |
| 1918 | cop_hit_val[1] = (cop_collision_info[0].pos[1] - cop_collision_info[1].pos[1]); |
| 1919 | cop_hit_val[0] = (cop_collision_info[0].pos[0] - cop_collision_info[1].pos[0]); |
| 1929 | 1920 | cop_hit_val[2] = 1; |
| 1930 | 1921 | cop_hit_val_stat = res; // TODO: there's also bit 2 and 3 triggered in the tests, no known meaning |
| 1931 | 1922 | |
| 1932 | 1923 | //popmessage("%d %d %04x %04x %04x %04x",cop_hit_val[1],cop_hit_val[0],m_LEGACY_cop_collision_info[0].hitbox_x,m_LEGACY_cop_collision_info[0].hitbox_y,m_LEGACY_cop_collision_info[1].hitbox_x,m_LEGACY_cop_collision_info[1].hitbox_y); |
| 1933 | 1924 | |
| 1934 | 1925 | //if(res == 0) |
| 1935 | | //popmessage("0:%08x %08x %08x 1:%08x %08x %08x\n",m_LEGACY_cop_collision_info[0].x,m_LEGACY_cop_collision_info[0].y,m_LEGACY_cop_collision_info[0].hitbox,m_LEGACY_cop_collision_info[1].x,m_LEGACY_cop_collision_info[1].y,m_LEGACY_cop_collision_info[1].hitbox); |
| 1926 | //popmessage("0:%08x %08x %08x 1:%08x %08x %08x\n",cop_collision_info[0].pos[1],cop_collision_info[0].pos[0],m_LEGACY_cop_collision_info[0].hitbox,cop_collision_info[1].pos[1],cop_collision_info[1].pos[0],m_LEGACY_cop_collision_info[1].hitbox); |
| 1936 | 1927 | // popmessage("0:%08x %08x %08x %08x 1:%08x %08x %08x %08x\n",m_LEGACY_cop_collision_info[0].min_x,m_LEGACY_cop_collision_info[0].max_x,m_LEGACY_cop_collision_info[0].min_y, m_LEGACY_cop_collision_info[0].max_y, |
| 1937 | 1928 | // m_LEGACY_cop_collision_info[1].min_x,m_LEGACY_cop_collision_info[1].max_x,m_LEGACY_cop_collision_info[1].min_y, m_LEGACY_cop_collision_info[1].max_y); |
| 1938 | 1929 | |
| r32371 | r32372 | |
| 2097 | 2088 | |
| 2098 | 2089 | if (check_command_matches(command, 0xb80, 0xb82, 0xb84, 0xb86, 0x000, 0x000, 0x000, 0x000, funcval, funcmask)) |
| 2099 | 2090 | { |
| 2100 | | LEGACY_execute_a100(space, offset, data); |
| 2091 | execute_a100(space, offset, data); |
| 2101 | 2092 | executed = 1; |
| 2102 | 2093 | return; |
| 2103 | 2094 | } |
| r32371 | r32372 | |
| 2113 | 2104 | if (check_command_matches(command, 0xba0, 0xba2, 0xba4, 0xba6, 0x000, 0x000, 0x000, 0x000, funcval, funcmask)) |
| 2114 | 2105 | { |
| 2115 | 2106 | executed = 1; |
| 2116 | | LEGACY_execute_a900(space, offset, data); |
| 2107 | execute_a900(space, offset, data); |
| 2117 | 2108 | return; |
| 2118 | 2109 | } |
| 2119 | 2110 | |
trunk/src/mame/machine/raiden2cop.h
| r32371 | r32372 | |
| 173 | 173 | void LEGACY_execute_130e(address_space &space, int offset, UINT16 data); |
| 174 | 174 | void LEGACY_execute_130e_cupsoc(address_space &space, int offset, UINT16 data); |
| 175 | 175 | void LEGACY_execute_3b30(address_space &space, int offset, UINT16 data); |
| 176 | | void LEGACY_execute_a100(address_space &space, int offset, UINT16 data); |
| 177 | 176 | void LEGACY_execute_b100(address_space &space, int offset, UINT16 data); |
| 178 | | void LEGACY_execute_a900(address_space &space, int offset, UINT16 data); |
| 179 | 177 | void LEGACY_execute_b900(address_space &space, int offset, UINT16 data); |
| 180 | 178 | void LEGACY_execute_42c2(address_space &space, int offset, UINT16 data); |
| 181 | 179 | void LEGACY_execute_e30e(address_space &space, int offset, UINT16 data); |
| r32371 | r32372 | |
| 233 | 231 | struct LEGACY_collision_info |
| 234 | 232 | { |
| 235 | 233 | LEGACY_collision_info(): |
| 236 | | x(0), |
| 237 | | y(0), |
| 234 | //x(0), |
| 235 | //y(0), |
| 238 | 236 | min_x(0), |
| 239 | 237 | min_y(0), |
| 240 | 238 | max_x(0), |
| r32371 | r32372 | |
| 243 | 241 | hitbox_x(0), |
| 244 | 242 | hitbox_y(0) {} |
| 245 | 243 | |
| 246 | | int x,y; |
| 244 | //int x,y; |
| 247 | 245 | INT16 min_x,min_y,max_x,max_y; |
| 248 | 246 | UINT16 hitbox; |
| 249 | 247 | UINT16 hitbox_x,hitbox_y; |