trunk/src/mame/drivers/namcos23.c
| r29195 | r29196 | |
| 1637 | 1637 | logerror("WARNING: c435_matrix_vector_mul with size %d\n", m_c435_buffer[0] & 0xf); |
| 1638 | 1638 | return; |
| 1639 | 1639 | } |
| 1640 | | if(m_c435_buffer[3] != 0xffff) |
| 1641 | | logerror("WARNING: c435_matrix_vector_mul with +2=%04x\n", m_c435_buffer[3]); |
| 1642 | 1640 | |
| 1643 | | INT32 *t = c435_getv(m_c435_buffer[1]); |
| 1644 | | const INT16 *m = c435_getm(m_c435_buffer[2]); |
| 1645 | | const INT32 *v = c435_getv(m_c435_buffer[4]); |
| 1641 | if(m_c435_buffer[3] != 0xffff) { |
| 1642 | INT32 *t = c435_getv(m_c435_buffer[1]); |
| 1643 | const INT16 *m = c435_getm(m_c435_buffer[2]); |
| 1644 | const INT32 *vt = c435_getv(m_c435_buffer[3]); |
| 1645 | const INT32 *v = c435_getv(m_c435_buffer[4]); |
| 1646 | 1646 | |
| 1647 | | t[0] = INT32((m[0]*INT64(v[0]) + m[1]*INT64(v[1]) + m[2]*INT64(v[2])) >> 14); |
| 1648 | | t[1] = INT32((m[3]*INT64(v[0]) + m[4]*INT64(v[1]) + m[5]*INT64(v[2])) >> 14); |
| 1649 | | t[2] = INT32((m[6]*INT64(v[0]) + m[7]*INT64(v[1]) + m[8]*INT64(v[2])) >> 14); |
| 1647 | t[0] = INT32((m[0]*INT64(v[0]) + m[1]*INT64(v[1]) + m[2]*INT64(v[2])) >> 14) + vt[0]; |
| 1648 | t[1] = INT32((m[3]*INT64(v[0]) + m[4]*INT64(v[1]) + m[5]*INT64(v[2])) >> 14) + vt[1]; |
| 1649 | t[2] = INT32((m[6]*INT64(v[0]) + m[7]*INT64(v[1]) + m[8]*INT64(v[2])) >> 14) + vt[2]; |
| 1650 | |
| 1651 | } else { |
| 1652 | INT32 *t = c435_getv(m_c435_buffer[1]); |
| 1653 | const INT16 *m = c435_getm(m_c435_buffer[2]); |
| 1654 | const INT32 *v = c435_getv(m_c435_buffer[4]); |
| 1655 | |
| 1656 | t[0] = INT32((m[0]*INT64(v[0]) + m[1]*INT64(v[1]) + m[2]*INT64(v[2])) >> 14); |
| 1657 | t[1] = INT32((m[3]*INT64(v[0]) + m[4]*INT64(v[1]) + m[5]*INT64(v[2])) >> 14); |
| 1658 | t[2] = INT32((m[6]*INT64(v[0]) + m[7]*INT64(v[1]) + m[8]*INT64(v[2])) >> 14); |
| 1659 | } |
| 1650 | 1660 | } |
| 1651 | 1661 | |
| 1652 | 1662 | void namcos23_state::c435_matrix_set() // 0.4 |
| r29195 | r29196 | |
| 1791 | 1801 | break; |
| 1792 | 1802 | |
| 1793 | 1803 | case 0x4000: |
| 1794 | | switch(h & 0xf00) { |
| 1795 | | case 0x400: c435_scaling_set(); break; |
| 1796 | | case 0xf00: c435_state_set(); break; |
| 1804 | switch(h & 0x3f00) { |
| 1805 | case 0x0400: c435_scaling_set(); break; |
| 1806 | case 0x0f00: c435_state_set(); break; |
| 1797 | 1807 | default: known = false; break; |
| 1798 | 1808 | } |
| 1799 | 1809 | break; |