diff options
Diffstat (limited to 'src/mame/machine/model1.cpp')
-rw-r--r-- | src/mame/machine/model1.cpp | 456 |
1 files changed, 259 insertions, 197 deletions
diff --git a/src/mame/machine/model1.cpp b/src/mame/machine/model1.cpp index 2f974d00a97..49a921dcef0 100644 --- a/src/mame/machine/model1.cpp +++ b/src/mame/machine/model1.cpp @@ -247,30 +247,36 @@ TGP_FUNCTION( model1_state::anglev ) next_fn(); } -TGP_FUNCTION( model1_state::f11 ) -{ - float a = fifoin_pop_f(); - float b = fifoin_pop_f(); - float c = fifoin_pop_f(); - float d = fifoin_pop_f(); - float e = fifoin_pop_f(); - float f = fifoin_pop_f(); - float g = fifoin_pop_f(); - float h = fifoin_pop_f(); - float i = fifoin_pop_f(); - (void)a; - (void)b; - (void)c; - (void)d; - (void)e; - (void)f; - (void)g; - (void)h; - (void)i; - logerror("TGP f11 %f, %f, %f, %f, %f, %f, %f, %f, %f (%x)\n", a, b, c, d, e, f, g, h, i, m_pushpc); - fifoout_push_f(0); - fifoout_push_f(0); - fifoout_push_f(0); +TGP_FUNCTION( model1_state::triangle_normal ) +{ + float p1x = fifoin_pop_f(); + float p1y = fifoin_pop_f(); + float p1z = fifoin_pop_f(); + float p2x = fifoin_pop_f(); + float p2y = fifoin_pop_f(); + float p2z = fifoin_pop_f(); + float p3x = fifoin_pop_f(); + float p3y = fifoin_pop_f(); + float p3z = fifoin_pop_f(); + + float nx = (p1y-p2y)*(p3z-p2z) - (p3y-p2y)*(p1z-p2z); + float ny = (p1z-p2z)*(p3x-p2x) - (p3z-p2z)*(p1x-p2x); + float nz = (p1x-p2x)*(p3y-p2y) - (p3x-p2x)*(p1y-p2y); + + float nn = sqrtf(nx*nx + ny*ny + nz*nz); + if(nn < 1e-3) + nn = 0; + else + nn = 1/nn; + + nx *= nn; + ny *= nn; + nz *= nn; + + logerror("TGP triangle_normal %f, %f, %f, %f, %f, %f, %f, %f, %f (%x)\n", p1x, p1y, p1z, p2x, p2y,p2z, p3x, p3y, p3z, m_pushpc); + fifoout_push_f(nx); + fifoout_push_f(ny); + fifoout_push_f(nz); next_fn(); } @@ -304,19 +310,25 @@ TGP_FUNCTION( model1_state::track_select ) next_fn(); } -TGP_FUNCTION( model1_state::f14 ) +TGP_FUNCTION( model1_state::load_base ) { m_tgp_vr_base[0] = fifoin_pop_f(); m_tgp_vr_base[1] = fifoin_pop_f(); m_tgp_vr_base[2] = fifoin_pop_f(); m_tgp_vr_base[3] = fifoin_pop_f(); + logerror("TGP load_base %f, %f, %f, %f (%x)\n", m_tgp_vr_base[0], m_tgp_vr_base[1], m_tgp_vr_base[2], m_tgp_vr_base[3], m_pushpc); next_fn(); } -TGP_FUNCTION( model1_state::f15_swa ) +TGP_FUNCTION( model1_state::transpose ) { - logerror("TGP f15_swa (%x)\n", m_pushpc); + logerror("TGP transpose (%x)\n", m_pushpc); + + float t; + t = m_cmat[1]; m_cmat[1] = m_cmat[3]; m_cmat[3] = t; + t = m_cmat[2]; m_cmat[2] = m_cmat[6]; m_cmat[6] = t; + t = m_cmat[5]; m_cmat[5] = m_cmat[7]; m_cmat[7] = t; next_fn(); } @@ -371,6 +383,8 @@ TGP_FUNCTION( model1_state::matrix_trans ) float b = fifoin_pop_f(); float c = fifoin_pop_f(); + logerror("TCP matrix_trans %f %f %f (%x)\n", a, b, c, m_pushpc); + m_cmat[ 9] += m_cmat[0]*a+m_cmat[3]*b+m_cmat[6]*c; m_cmat[10] += m_cmat[1]*a+m_cmat[4]*b+m_cmat[7]*c; m_cmat[11] += m_cmat[2]*a+m_cmat[5]*b+m_cmat[8]*c; @@ -487,24 +501,74 @@ TGP_FUNCTION( model1_state::track_read_quad ) next_fn(); } -TGP_FUNCTION( model1_state::f24_swa ) +TGP_FUNCTION( model1_state::intercept ) { - float a = fifoin_pop_f(); - float b = fifoin_pop_f(); - float c = fifoin_pop_f(); - float d = fifoin_pop_f(); - float e = fifoin_pop_f(); - float f = fifoin_pop_f(); - UINT32 g = fifoin_pop(); - (void)a; - (void)b; - (void)c; - (void)d; - (void)e; - (void)f; - (void)g; - logerror("TGP f24_swa %f, %f, %f, %f, %f, %f, %x (%x)\n", a, b, c, d, e, f, g, m_pushpc); - fifoout_push_f(0); + const UINT32 *tgp_data = (const UINT32 *)memregion("user2")->base(); + + float x1 = fifoin_pop_f(); + float y1 = fifoin_pop_f(); + float z1 = fifoin_pop_f(); + float x2 = fifoin_pop_f(); + float y2 = fifoin_pop_f(); + float z2 = fifoin_pop_f(); + UINT32 idx = fifoin_pop(); + + logerror("TGP intercept %f, %f, %f, %f, %f, %f, %x (%x)\n", x1, y1, z1, x2, y2, z2, idx, m_pushpc); + + float dx = x2-x1; + float dy = y2-y1; + float dz = z2-z1; + + idx = tgp_data[0x10] + 2*idx; + UINT32 count = tgp_data[idx]; + UINT32 adr = tgp_data[idx+1]; + UINT32 ret = 1; + + for(unsigned int j=0; j<count; j++) { + float point[4][3]; + for(int pt=0; pt<4; pt++) + for(int dim=0; dim<3; dim++) + point[pt][dim] = u2f(tgp_data[adr++]); + float plane[4]; + for(int dim=0; dim<4; dim++) + plane[dim] = u2f(tgp_data[adr++]); + adr++; // 0, 1 or 2... + + float den = dx * plane[0] + dy * plane[1] + dz * plane[2]; + if(den > -0.0001 && den < 0.0001) + continue; + float t = - (x1 * plane[0] + y1 * plane[1] + z1 * plane[2] + plane[3]) / den; + if(t < 0 || t > 1) + continue; + + float ix = x1 + dx*t; + float iy = y1 + dy*t; + float iz = z1 + dz*t; + + int cp = 0; + for(int pt=0; pt<4; pt++) { + int pt1 = (pt+1) & 3; + float p01x = point[pt1][0] - point[pt][0]; + float p01y = point[pt1][1] - point[pt][1]; + float p01z = point[pt1][2] - point[pt][2]; + float p0ix = ix - point[pt][0]; + float p0iy = iy - point[pt][1]; + float p0iz = iz - point[pt][2]; + float det = plane[0] * (p01y * p0iz - p01z * p0iy) + plane[1] * (p01z * p0ix - p01x * p0iz) + plane[2] * (p01x * p0iy - p01y * p0ix); + cp += det >= 0; + } + if(cp == 0 || cp == 4) { + m_tgp_int_px = ix; + m_tgp_int_py = iy; + m_tgp_int_pz = iz; + ret = 0; + adr -= 17; + break; + } + } + + m_tgp_int_adr = adr; + fifoout_push(ret); next_fn(); } @@ -514,7 +578,6 @@ TGP_FUNCTION( model1_state::transform_point ) float y = fifoin_pop_f(); float z = fifoin_pop_f(); logerror("TGP transform_point %f, %f, %f (%x)\n", x, y, z, m_pushpc); - fifoout_push_f(m_cmat[0]*x+m_cmat[3]*y+m_cmat[6]*z+m_cmat[9]); fifoout_push_f(m_cmat[1]*x+m_cmat[4]*y+m_cmat[7]*z+m_cmat[10]); fifoout_push_f(m_cmat[2]*x+m_cmat[5]*y+m_cmat[8]*z+m_cmat[11]); @@ -568,7 +631,7 @@ TGP_FUNCTION( model1_state::distance3 ) a -= d; b -= e; c -= f; - fifoout_push_f((a*a+b*b+c*c)/sqrtf(a*a+b*b+c*c)); + fifoout_push_f(sqrtf(a*a+b*b+c*c)); next_fn(); } @@ -663,12 +726,9 @@ TGP_FUNCTION( model1_state::xyz2rqf ) float b = fifoin_pop_f(); float c = fifoin_pop_f(); float norm; - (void)a; - (void)b; - (void)c; logerror("TGP xyz2rqf %f, %f, %f (%x)\n", a, b, c, m_pushpc); - fifoout_push_f((a*a+b*b+c*c)/sqrtf(a*a+b*b+c*c)); - norm = sqrt(a*a+c*c); + fifoout_push_f(sqrtf(a*a+b*b+c*c)); + norm = sqrtf(a*a+c*c); if(!c) { if(a>=0) fifoout_push(0); @@ -732,14 +792,18 @@ TGP_FUNCTION( model1_state::f43_swa ) next_fn(); } -TGP_FUNCTION( model1_state::f44 ) +TGP_FUNCTION( model1_state::track_read_tri ) { - float a = fifoin_pop_f(); - (void)a; - logerror("TGP f44 %f (%x)\n", a, m_pushpc); - fifoout_push_f(0); - fifoout_push_f(0); - fifoout_push_f(0); + const UINT32 *tgp_data = (const UINT32 *)memregion("user2")->base(); + UINT32 a = fifoin_pop(); + int offd; + + logerror("TGP track_read_tri %d (%x)\n", a, m_pushpc); + + offd = tgp_data[0x20+m_tgp_vr_select] + 16*a; + fifoout_push(tgp_data[offd+12]); + fifoout_push(tgp_data[offd+13]); + fifoout_push(tgp_data[offd+14]); next_fn(); } @@ -748,7 +812,7 @@ TGP_FUNCTION( model1_state::matrix_sdir ) float a = fifoin_pop_f(); float b = fifoin_pop_f(); float c = fifoin_pop_f(); - float norm = sqrt(a*a+b*b+c*c); + float norm = sqrtf(a*a+b*b+c*c); float t[9], m[9]; logerror("TGP matrix_sdir %f, %f, %f (%x)\n", a, b, c, m_pushpc); @@ -764,7 +828,7 @@ TGP_FUNCTION( model1_state::matrix_sdir ) t[1] = b / norm; t[2] = a / norm; - norm = sqrt(a*a+c*c); + norm = sqrtf(a*a+c*c); t[6] = a/norm; t[7] = 0; t[8] = c/norm; @@ -772,7 +836,7 @@ TGP_FUNCTION( model1_state::matrix_sdir ) t[3] = -b*c; t[4] = a*a+c*c; t[5] = -b*a; - norm = sqrt(t[3]*t[3]+t[4]*t[4]+t[5]*t[5]); + norm = sqrtf(t[3]*t[3]+t[4]*t[4]+t[5]*t[5]); t[3] /= norm; t[4] /= norm; t[5] /= norm; @@ -793,27 +857,25 @@ TGP_FUNCTION( model1_state::matrix_sdir ) next_fn(); } -TGP_FUNCTION( model1_state::f45 ) +TGP_FUNCTION( model1_state::fsqrt ) { float a = fifoin_pop_f(); - (void)a; - logerror("TGP f45 %f (%x)\n", a, m_pushpc); - fifoout_push_f(0); + logerror("TGP fsqrt %f (%x)\n", a, m_pushpc); + fifoout_push_f(sqrtf(a)); next_fn(); } TGP_FUNCTION( model1_state::vlength ) { - float a = fifoin_pop_f() - m_tgp_vr_base[0]; - float b = fifoin_pop_f() - m_tgp_vr_base[1]; - float c = fifoin_pop_f() - m_tgp_vr_base[2]; - logerror("TGP vlength %f, %f, %f (%x)\n", a, b, c, m_pushpc); + float x = fifoin_pop_f(); + float y = fifoin_pop_f(); + float z = fifoin_pop_f(); + logerror("TGP vlength %f, %f, %f (%x)\n", x, y, z, m_pushpc); - a = (a*a+b*b+c*c); - b = 1/sqrt(a); - c = a * b; - c -= m_tgp_vr_base[3]; - fifoout_push_f(c); + x -= m_tgp_vr_base[0]; + y -= m_tgp_vr_base[1]; + z -= m_tgp_vr_base[2]; + fifoout_push_f(sqrtf(x*x + y*y + z*z) - m_tgp_vr_base[3]); next_fn(); } @@ -931,7 +993,7 @@ TGP_FUNCTION( model1_state::matrix_rdir ) float a = fifoin_pop_f(); float b = fifoin_pop_f(); float c = fifoin_pop_f(); - float norm = sqrt(a*a+c*c); + float norm = sqrtf(a*a+c*c); float t1, t2; (void)b; @@ -1055,12 +1117,13 @@ TGP_FUNCTION( model1_state::f56 ) next_fn(); } -TGP_FUNCTION( model1_state::f57 ) +TGP_FUNCTION( model1_state::int_normal ) { - logerror("TGP f57 (%x)\n", m_pushpc); - fifoout_push_f(0); - fifoout_push_f(0); - fifoout_push_f(0); + const UINT32 *tgp_data = (const UINT32 *)memregion("user2")->base(); + logerror("TGP int_normal (%x)\n", m_pushpc); + fifoout_push_f(u2f(tgp_data[m_tgp_int_adr+12])); + fifoout_push_f(u2f(tgp_data[m_tgp_int_adr+13])); + fifoout_push_f(u2f(tgp_data[m_tgp_int_adr+14])); next_fn(); } @@ -1080,12 +1143,12 @@ TGP_FUNCTION( model1_state::acc_geti ) next_fn(); } -TGP_FUNCTION( model1_state::f60 ) +TGP_FUNCTION( model1_state::int_point ) { - logerror("TGP f60 (%x)\n", m_pushpc); - fifoout_push_f(0); - fifoout_push_f(0); - fifoout_push_f(0); + logerror("TGP int_point (%x)\n", m_pushpc); + fifoout_push_f(m_tgp_int_px); + fifoout_push_f(m_tgp_int_py); + fifoout_push_f(m_tgp_int_pz); next_fn(); } @@ -1109,7 +1172,7 @@ TGP_FUNCTION( model1_state::col_testpt ) logerror("TGP col_testpt %f, %f (%x)\n", a, b, m_pushpc); x = a - m_tgp_vr_circx; y = b - m_tgp_vr_circy; - fifoout_push_f(((x*x+y*y)/sqrtf(x*x+y*y)) - m_tgp_vr_circrad); + fifoout_push_f(sqrtf(x*x+y*y) - m_tgp_vr_circrad); next_fn(); } @@ -1170,7 +1233,7 @@ TGP_FUNCTION( model1_state::distance ) logerror("TGP distance (%f, %f), (%f, %f) (%x)\n", a, b, c, d, m_pushpc); c -= a; d -= b; - fifoout_push_f((c*c+d*d)/sqrtf(c*c+d*d)); + fifoout_push_f(sqrtf(c*c+d*d)); next_fn(); } @@ -1233,7 +1296,7 @@ TGP_FUNCTION( model1_state::cpa ) dv_z = (i-k)*(1-dt) + (j-l)*dt; dv2 = dv_x*dv_x + dv_y*dv_y + dv_z*dv_z; - fifoout_push_f(sqrt(dv2)); + fifoout_push_f(sqrtf(dv2)); next_fn(); } @@ -1581,110 +1644,111 @@ TGP_FUNCTION( model1_state::f103 ) next_fn(); } +// Addresses in daytona's TGP program const struct model1_state::function model1_state::ftab_vf[] = { - { &model1_state::fadd, 2 }, /* 0x00 */ - { &model1_state::fsub, 2 }, - { &model1_state::fmul, 2 }, - { &model1_state::fdiv, 2 }, - { nullptr, 0 }, - { &model1_state::matrix_push, 0 }, - { &model1_state::matrix_pop, 0 }, - { &model1_state::matrix_write, 12 }, - { &model1_state::clear_stack, 0 }, - { nullptr, 0 }, - { &model1_state::anglev, 2 }, - { nullptr, 0 }, - { nullptr, 0 }, - { &model1_state::track_select, 1 }, - { &model1_state::f14, 4 }, - { &model1_state::anglep, 4 }, - - { &model1_state::matrix_ident, 0 }, /* 0x10 */ - { &model1_state::matrix_read, 0 }, - { &model1_state::matrix_trans, 3 }, - { &model1_state::matrix_scale, 3 }, - { &model1_state::matrix_rotx, 1 }, - { &model1_state::matrix_roty, 1 }, - { &model1_state::matrix_rotz, 1 }, - { nullptr, 0 }, - { &model1_state::track_read_quad, 1 }, - { nullptr, 0 }, - { &model1_state::transform_point, 3 }, - { &model1_state::fsin_m1, 1 }, - { &model1_state::fcos_m1, 1 }, - { &model1_state::fsinm_m1, 2 }, - { &model1_state::fcosm_m1, 2 }, - { &model1_state::distance3, 6 }, - - { nullptr, 0 }, /* 0x20 */ - { nullptr, 0 }, - { nullptr, 0 }, - { nullptr, 0 }, - { &model1_state::acc_set, 1 }, - { &model1_state::acc_get, 0 }, - { &model1_state::acc_add, 1 }, - { &model1_state::acc_sub, 1 }, - { &model1_state::acc_mul, 1 }, - { &model1_state::acc_div, 1 }, // not used ? - { &model1_state::f42, 3 }, - { &model1_state::f43, 6 }, - { &model1_state::f44, 1 }, - { &model1_state::f45, 1 }, - { &model1_state::vlength, 3 }, - { nullptr, 0 }, - - { &model1_state::track_read_info, 1 }, /* 0x30 */ - { &model1_state::colbox_set, 12 }, - { &model1_state::colbox_test, 3 }, - { nullptr, 0 }, - { nullptr, 0 }, - { nullptr, 0 }, - { &model1_state::track_lookup, 4 }, - { nullptr, 0 }, - { nullptr, 0 }, - { nullptr, 0 }, - { nullptr, 0 }, - { nullptr, 0 }, - { nullptr, 0 }, - { nullptr, 0 }, - { nullptr, 0 }, - { nullptr, 0 }, - - { &model1_state::col_setcirc, 3 }, /* 0x40 */ - { &model1_state::col_testpt, 2 }, - { nullptr, 0 }, - { &model1_state::distance, 4 }, - { nullptr, 0 }, - { nullptr, 0 }, - { nullptr, 0 }, - { &model1_state::car_move, 4 }, - { &model1_state::cpa, 12 }, - { nullptr, 0 }, + { &model1_state::fadd, 2 }, /* 0x00 */ // 0b5 + { &model1_state::fsub, 2 }, // 0ba + { &model1_state::fmul, 2 }, // 0bf + { &model1_state::fdiv, 2 }, // 0c4 + { nullptr, 0 }, // 0d2 + { &model1_state::matrix_push, 0 }, // 0e3 + { &model1_state::matrix_pop, 0 }, // 0f7 + { &model1_state::matrix_write, 12 }, // 106 + { &model1_state::clear_stack, 0 }, // 10a + { &model1_state::matrix_mul, 12 }, // 10e + { &model1_state::anglev, 2 }, // 154 + { nullptr, 0 }, // 15d + { nullptr, 0 }, // 19f + { &model1_state::track_select, 1 }, // 1b8 + { &model1_state::load_base, 4 }, // 1bb + { &model1_state::anglep, 4 }, // 1c1 + + { &model1_state::matrix_ident, 0 }, /* 0x10 */ // 1d2 + { &model1_state::matrix_read, 0 }, // 1d9 + { &model1_state::matrix_trans, 3 }, // 1dd + { &model1_state::matrix_scale, 3 }, // 1f3 + { &model1_state::matrix_rotx, 1 }, // 20a + { &model1_state::matrix_roty, 1 }, // 223 + { &model1_state::matrix_rotz, 1 }, // 23b + { nullptr, 0 }, // 253 + { &model1_state::track_read_quad, 1 }, // 2aa + { nullptr, 0 }, // 2b0 + { &model1_state::transform_point, 3 }, // 2b2 + { &model1_state::fsin_m1, 1 }, // 2cb + { &model1_state::fcos_m1, 1 }, // 2ce + { &model1_state::fsinm_m1, 2 }, // 2d1 + { &model1_state::fcosm_m1, 2 }, // 2d7 + { &model1_state::distance3, 6 }, // 2dd + + { nullptr, 0 }, /* 0x20 */ // 2ff + { nullptr, 0 }, // 2ff + { nullptr, 0 }, // 300 + { nullptr, 0 }, // 304 + { &model1_state::acc_set, 1 }, // 308 + { &model1_state::acc_get, 0 }, // 30a + { &model1_state::acc_add, 1 }, // 30c + { &model1_state::acc_sub, 1 }, // 311 + { &model1_state::acc_mul, 1 }, // 316 + { &model1_state::acc_div, 1 }, // 31b + { &model1_state::f42, 3 }, // 329 + { &model1_state::f43, 6 }, // 36c + { &model1_state::track_read_tri, 1 }, // 3c2 + { &model1_state::fsqrt, 1 }, // 3c7 + { &model1_state::vlength, 3 }, // 3cf + { nullptr, 0 }, // 3ef + + { &model1_state::track_read_info, 1 }, /* 0x30 */ // 410 + { &model1_state::colbox_set, 12 }, // 413 + { &model1_state::colbox_test, 3 }, // 417 + { nullptr, 0 }, // 43b + { nullptr, 0 }, // 44d + { nullptr, 0 }, // 452 + { &model1_state::track_lookup, 4 }, // 457 + { nullptr, 0 }, // 51a + { nullptr, 0 }, // 521 + { nullptr, 0 }, // 52f + { nullptr, 0 }, // 53d + { nullptr, 0 }, // 545 + { nullptr, 0 }, // 558 + { nullptr, 0 }, // 559 + { nullptr, 0 }, // 5c6 + { nullptr, 0 }, // 5e9 + + { &model1_state::col_setcirc, 3 }, /* 0x40 */ // 5f3 + { &model1_state::col_testpt, 2 }, // 5fa + { nullptr, 0 }, // 615 + { &model1_state::distance, 4 }, // 631 + { nullptr, 0 }, // 63f + { nullptr, 0 }, // 643 + { nullptr, 0 }, // 64b + { &model1_state::car_move, 4 }, // 661 + { &model1_state::cpa, 12 }, // 7d9 + { nullptr, 0 }, { &model1_state::vmat_store, 1 }, { &model1_state::vmat_restore, 1 }, - { nullptr, 0 }, + { nullptr, 0 }, { &model1_state::vmat_mul, 2 }, { &model1_state::vmat_read, 1 }, { &model1_state::matrix_unrot, 0 }, - { &model1_state::f80, 0 }, /* 0x50 */ - { nullptr, 0 }, + { &model1_state::f80, 0 }, /* 0x50 */ + { nullptr, 0 }, { &model1_state::matrix_rtrans, 0 }, - { nullptr, 0 }, + { nullptr, 0 }, { &model1_state::vmat_save, 1 }, { &model1_state::vmat_load, 1 }, { &model1_state::ram_setadr, 1 }, { &model1_state::groundbox_test, 3 }, - { nullptr, 0 }, + { nullptr, 0 }, { &model1_state::f89, 4 }, - { nullptr, 0 }, - { nullptr, 0 }, + { nullptr, 0 }, + { nullptr, 0 }, { &model1_state::f92, 4 }, { &model1_state::f93, 1 }, { &model1_state::f94, 1 }, { &model1_state::vmat_flatten, 0 }, - { &model1_state::vmat_load1, 1 }, /* 0x60 */ + { &model1_state::vmat_load1, 1 }, /* 0x60 */ { &model1_state::ram_trans, 0 }, { &model1_state::f98, 1 }, { &model1_state::f99, 0 }, @@ -1695,27 +1759,25 @@ const struct model1_state::function model1_state::ftab_vf[] = { }; // Used in swa scene 1 and unemulated: -// f14 // f49_swa -// f15_swa const struct model1_state::function model1_state::ftab_swa[] = { { &model1_state::fadd, 2 }, /* 0x00 */ { &model1_state::fsub, 2 }, { &model1_state::fmul, 2 }, { &model1_state::fdiv, 2 }, - { nullptr, 0 }, + { nullptr, 0 }, { &model1_state::matrix_push, 0 }, { &model1_state::matrix_pop, 0 }, { &model1_state::matrix_write, 12 }, { &model1_state::clear_stack, 0 }, { &model1_state::matrix_mul, 12 }, { &model1_state::anglev, 2 }, - { &model1_state::f11, 9 }, + { &model1_state::triangle_normal, 9 }, { &model1_state::normalize, 3 }, { &model1_state::acc_seti, 1 }, - { &model1_state::f14, 4 }, - { &model1_state::f15_swa, 0 }, + { &model1_state::load_base, 4 }, + { &model1_state::transpose, 0 }, { &model1_state::matrix_ident, 0 }, /* 0x10 */ { &model1_state::matrix_read, 0 }, @@ -1724,9 +1786,9 @@ const struct model1_state::function model1_state::ftab_swa[] = { { &model1_state::matrix_rotx, 1 }, { &model1_state::matrix_roty, 1 }, { &model1_state::matrix_rotz, 1 }, - { nullptr, 0 }, - { &model1_state::f24_swa, 7 }, - { nullptr, 0 }, + { nullptr, 0 }, + { &model1_state::intercept, 7 }, + { nullptr, 0 }, { &model1_state::transform_point, 3 }, { &model1_state::fsin_m1, 1 }, { &model1_state::fcos_m1, 1 }, @@ -1734,8 +1796,8 @@ const struct model1_state::function model1_state::ftab_swa[] = { { &model1_state::fcosm_m1, 2 }, { &model1_state::distance3, 6 }, - { nullptr, 0 }, /* 0x20 */ - { nullptr, 0 }, + { nullptr, 0 }, /* 0x20 */ + { nullptr, 0 }, { &model1_state::ftoi, 1 }, { &model1_state::itof, 1 }, { &model1_state::acc_set, 1 }, @@ -1747,30 +1809,30 @@ const struct model1_state::function model1_state::ftab_swa[] = { { &model1_state::xyz2rqf, 3 }, { &model1_state::f43_swa, 3 }, { &model1_state::matrix_sdir, 3 }, - { &model1_state::f45, 1 }, + { &model1_state::fsqrt, 1 }, { &model1_state::vlength, 3 }, { &model1_state::f47, 3 }, - { nullptr, 0 }, /* 0x30 */ + { nullptr, 0 }, /* 0x30 */ { &model1_state::f49_swa, 6 }, { &model1_state::f50_swa, 4 }, - { nullptr, 0 }, + { nullptr, 0 }, { &model1_state::f52, 0 }, { &model1_state::matrix_rdir, 3 }, - { nullptr, 0 }, - { nullptr, 0 }, + { nullptr, 0 }, + { nullptr, 0 }, { &model1_state::f56, 7 }, - { &model1_state::f57, 0 }, + { &model1_state::int_normal, 0 }, { &model1_state::matrix_readt, 0 }, { &model1_state::acc_geti, 0 }, - { &model1_state::f60, 0 }, - { nullptr, 0 }, - { nullptr, 0 }, - { nullptr, 0 }, - { nullptr, 0 }, + { &model1_state::int_point, 0 }, + { nullptr, 0 }, + { nullptr, 0 }, + { nullptr, 0 }, + { nullptr, 0 }, { &model1_state::push_and_ident, 0 }, /* 0x40 */ - { nullptr, 0 }, + { nullptr, 0 }, { &model1_state::catmull_rom, 13 } }; |