namcos23: Enhance matrix-vector mul [O. Galibert]
This commit is contained in:
parent
ddc2acd46b
commit
e9e5edab27
@ -1637,9 +1637,18 @@ void namcos23_state::c435_matrix_vector_mul() // 0.1
|
||||
logerror("WARNING: c435_matrix_vector_mul with size %d\n", m_c435_buffer[0] & 0xf);
|
||||
return;
|
||||
}
|
||||
if(m_c435_buffer[3] != 0xffff)
|
||||
logerror("WARNING: c435_matrix_vector_mul with +2=%04x\n", m_c435_buffer[3]);
|
||||
|
||||
if(m_c435_buffer[3] != 0xffff) {
|
||||
INT32 *t = c435_getv(m_c435_buffer[1]);
|
||||
const INT16 *m = c435_getm(m_c435_buffer[2]);
|
||||
const INT32 *vt = c435_getv(m_c435_buffer[3]);
|
||||
const INT32 *v = c435_getv(m_c435_buffer[4]);
|
||||
|
||||
t[0] = INT32((m[0]*INT64(v[0]) + m[1]*INT64(v[1]) + m[2]*INT64(v[2])) >> 14) + vt[0];
|
||||
t[1] = INT32((m[3]*INT64(v[0]) + m[4]*INT64(v[1]) + m[5]*INT64(v[2])) >> 14) + vt[1];
|
||||
t[2] = INT32((m[6]*INT64(v[0]) + m[7]*INT64(v[1]) + m[8]*INT64(v[2])) >> 14) + vt[2];
|
||||
|
||||
} else {
|
||||
INT32 *t = c435_getv(m_c435_buffer[1]);
|
||||
const INT16 *m = c435_getm(m_c435_buffer[2]);
|
||||
const INT32 *v = c435_getv(m_c435_buffer[4]);
|
||||
@ -1647,6 +1656,7 @@ void namcos23_state::c435_matrix_vector_mul() // 0.1
|
||||
t[0] = INT32((m[0]*INT64(v[0]) + m[1]*INT64(v[1]) + m[2]*INT64(v[2])) >> 14);
|
||||
t[1] = INT32((m[3]*INT64(v[0]) + m[4]*INT64(v[1]) + m[5]*INT64(v[2])) >> 14);
|
||||
t[2] = INT32((m[6]*INT64(v[0]) + m[7]*INT64(v[1]) + m[8]*INT64(v[2])) >> 14);
|
||||
}
|
||||
}
|
||||
|
||||
void namcos23_state::c435_matrix_set() // 0.4
|
||||
@ -1791,9 +1801,9 @@ void namcos23_state::c435_pio_w(UINT16 data)
|
||||
break;
|
||||
|
||||
case 0x4000:
|
||||
switch(h & 0xf00) {
|
||||
case 0x400: c435_scaling_set(); break;
|
||||
case 0xf00: c435_state_set(); break;
|
||||
switch(h & 0x3f00) {
|
||||
case 0x0400: c435_scaling_set(); break;
|
||||
case 0x0f00: c435_state_set(); break;
|
||||
default: known = false; break;
|
||||
}
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user