void F3DEX2CBFD_MoveWord( u32 w0, u32 w1 ) { switch (_SHIFTR( w0, 16, 8 )) { case G_MW_NUMLIGHT: gSPNumLights(w1 / 48); break; case G_MW_CLIP: gSPClipRatio( w1 ); break; case G_MW_SEGMENT: gSPSegment( _SHIFTR( w0, 0, 16 ) >> 2, w1 & 0x00FFFFFF ); break; case G_MW_FOG: gSPFogFactor( (s16)_SHIFTR( w1, 16, 16 ), (s16)_SHIFTR( w1, 0, 16 ) ); break; case G_MW_PERSPNORM: gSPPerspNormalize( w1 ); break; case G_MV_COORDMOD: gSPCoordMod( w0, w1 ); break; } }
void F3DSETA_MoveWord(u32 w0, u32 w1) { switch (_SHIFTR( w0, 8, 8 )) { case F3DSETA_MW_NUMLIGHT: gSPNumLights( ((w1 - 0x80000000) >> 5) - 1 ); break; case F3DSETA_MW_CLIP: gSPClipRatio( w1 ); break; case F3DSETA_MW_SEGMENT: gSPSegment( _SHIFTR( w0, 10, 4 ), w1 & 0x00FFFFFF ); break; case F3DSETA_MW_FOG: gSPFogFactor( (s16)_SHIFTR( w1, 16, 16 ), (s16)_SHIFTR( w1, 0, 16 ) ); break; case F3DSETA_MW_LIGHTCOL: switch (_SHIFTR( w0, 0, 8 )) { case F3D_MWO_aLIGHT_1: gSPLightColor( LIGHT_1, w1 ); break; case F3D_MWO_aLIGHT_2: gSPLightColor( LIGHT_2, w1 ); break; case F3D_MWO_aLIGHT_3: gSPLightColor( LIGHT_3, w1 ); break; case F3D_MWO_aLIGHT_4: gSPLightColor( LIGHT_4, w1 ); break; case F3D_MWO_aLIGHT_5: gSPLightColor( LIGHT_5, w1 ); break; case F3D_MWO_aLIGHT_6: gSPLightColor( LIGHT_6, w1 ); break; case F3D_MWO_aLIGHT_7: gSPLightColor( LIGHT_7, w1 ); break; case F3D_MWO_aLIGHT_8: gSPLightColor( LIGHT_8, w1 ); break; } break; default: assert(false && "F3DSETA unknown MoveWord"); } }
void F3D_MoveWord( u32 w0, u32 w1 ) { switch (_SHIFTR( w0, 0, 8 )) { case G_MW_MATRIX: gSPInsertMatrix( _SHIFTR( w0, 8, 16 ), w1 ); break; case G_MW_NUMLIGHT: gSPNumLights( ((w1 - 0x80000000) >> 5) - 1 ); break; case G_MW_CLIP: gSPClipRatio( w1 ); break; case G_MW_SEGMENT: gSPSegment( _SHIFTR( w0, 8, 16 ) >> 2, w1 & 0x00FFFFFF ); break; case G_MW_FOG: /* u32 fm, fo, min, max; fm = _SHIFTR( w1, 16, 16 ); fo = _SHIFTR( w1, 0, 16 ); min = 500 - (fo * (128000 / fm)) / 256; max = (128000 / fm) + min;*/ gSPFogFactor( (s16)_SHIFTR( w1, 16, 16 ), (s16)_SHIFTR( w1, 0, 16 ) ); break; case G_MW_LIGHTCOL: switch (_SHIFTR( w0, 8, 16 )) { case F3D_MWO_aLIGHT_1: gSPLightColor( LIGHT_1, w1 ); break; case F3D_MWO_aLIGHT_2: gSPLightColor( LIGHT_2, w1 ); break; case F3D_MWO_aLIGHT_3: gSPLightColor( LIGHT_3, w1 ); break; case F3D_MWO_aLIGHT_4: gSPLightColor( LIGHT_4, w1 ); break; case F3D_MWO_aLIGHT_5: gSPLightColor( LIGHT_5, w1 ); break; case F3D_MWO_aLIGHT_6: gSPLightColor( LIGHT_6, w1 ); break; case F3D_MWO_aLIGHT_7: gSPLightColor( LIGHT_7, w1 ); break; case F3D_MWO_aLIGHT_8: gSPLightColor( LIGHT_8, w1 ); break; } break; case G_MW_POINTS: gSPModifyVertex( _SHIFTR( w0, 8, 16 ) / 40, _SHIFTR( w0, 0, 8 ) % 40, w1 ); break; case G_MW_PERSPNORM: gSPPerspNormalize( w1 ); break; } }
void ZSortBOSS_MoveMem( u32 _w0, u32 _w1 ) { int flag = (_w0 >> 23) & 0x01; int len = 1 + (_w0 >> 12) & 0x7ff; u32 addr = RSP_SegmentToPhysical(_w1); assert((addr & 3) == 0); assert((_w0 & 3) == 0); LOG(LOG_VERBOSE, "ZSortBOSS_MoveMem (R/W: %d, RDRAM: 0x%08x, DMEM: 0x%04x; len: %d)\n", flag, addr, (_w0 & 0xfff), len); // model matrix if((_w0 & 0xfff) == 0x830) { assert(flag == 0); RSP_LoadMatrix(gSP.matrix.modelView[gSP.matrix.modelViewi], addr); gSP.changed |= CHANGED_MATRIX; return; } // projection matrix if((_w0 & 0xfff) == 0x870) { assert(flag == 0); RSP_LoadMatrix(gSP.matrix.projection, addr); gSP.changed |= CHANGED_MATRIX; return; } // combined matrix if((_w0 & 0xfff) == 0x8b0) { if(flag == 0) { RSP_LoadMatrix(gSP.matrix.combined, addr); gSP.changed &= ~CHANGED_MATRIX; } else { StoreMatrix(gSP.matrix.combined, addr); } return; } // VIEWPORT if((_w0 & 0xfff) == 0x0) { u32 a = addr >> 1; const f32 scale_x = _FIXED2FLOAT( ((s16*)RDRAM)[(a+0)^1], 2 ); const f32 scale_y = _FIXED2FLOAT( ((s16*)RDRAM)[(a+1)^1], 2 ); const f32 scale_z = _FIXED2FLOAT( ((s16*)RDRAM)[(a+2)^1], 10 ); const s16 fm = ((s16*)RDRAM)[(a+3)^1]; const f32 trans_x = _FIXED2FLOAT( ((s16*)RDRAM)[(a+4)^1], 2 ); const f32 trans_y = _FIXED2FLOAT( ((s16*)RDRAM)[(a+5)^1], 2 ); const f32 trans_z = _FIXED2FLOAT( ((s16*)RDRAM)[(a+6)^1], 10 ); const s16 fo = ((s16*)RDRAM)[(a+7)^1]; gSPFogFactor(fm, fo); gSP.viewport.vscale[0] = scale_x; gSP.viewport.vscale[1] = scale_y; gSP.viewport.vscale[2] = scale_z; gSP.viewport.vtrans[0] = trans_x; gSP.viewport.vtrans[1] = trans_y; gSP.viewport.vtrans[2] = trans_z; gSP.viewport.x = gSP.viewport.vtrans[0] - gSP.viewport.vscale[0]; gSP.viewport.y = gSP.viewport.vtrans[1] - gSP.viewport.vscale[1]; gSP.viewport.width = gSP.viewport.vscale[0] * 2; gSP.viewport.height = gSP.viewport.vscale[1] * 2; gSP.viewport.nearz = gSP.viewport.vtrans[2] - gSP.viewport.vscale[2]; gSP.viewport.farz = (gSP.viewport.vtrans[2] + gSP.viewport.vscale[2]); gstate.view_scale[0] = scale_x*4.0f; gstate.view_scale[1] = scale_y*4.0f; gstate.view_trans[0] = trans_x*4.0f; gstate.view_trans[1] = trans_y*4.0f; gSP.changed |= CHANGED_VIEWPORT; return; }
void F3D_MoveWord( u32 w0, u32 w1 ) { switch (_SHIFTR( w0, 0, 8 )) { case G_MW_MATRIX: gSPInsertMatrix( _SHIFTR( w0, 8, 16 ), w1 ); break; case G_MW_NUMLIGHT: gSPNumLights( ((w1 - 0x80000000) >> 5) - 1 ); break; case G_MW_CLIP: gSPClipRatio( w1 ); break; case G_MW_SEGMENT: gSPSegment( _SHIFTR( w0, 10, 4 ), w1 & 0x00FFFFFF ); break; case G_MW_FOG: gSPFogFactor( (s16)_SHIFTR( w1, 16, 16 ), (s16)_SHIFTR( w1, 0, 16 ) ); break; case G_MW_LIGHTCOL: switch (_SHIFTR( w0, 8, 16 )) { case F3D_MWO_aLIGHT_1: gSPLightColor( LIGHT_1, w1 ); break; case F3D_MWO_aLIGHT_2: gSPLightColor( LIGHT_2, w1 ); break; case F3D_MWO_aLIGHT_3: gSPLightColor( LIGHT_3, w1 ); break; case F3D_MWO_aLIGHT_4: gSPLightColor( LIGHT_4, w1 ); break; case F3D_MWO_aLIGHT_5: gSPLightColor( LIGHT_5, w1 ); break; case F3D_MWO_aLIGHT_6: gSPLightColor( LIGHT_6, w1 ); break; case F3D_MWO_aLIGHT_7: gSPLightColor( LIGHT_7, w1 ); break; case F3D_MWO_aLIGHT_8: gSPLightColor( LIGHT_8, w1 ); break; } break; case G_MW_POINTS: { const u32 val = _SHIFTR(w0, 8, 16); gSPModifyVertex(val / 40, val % 40, w1); } break; case G_MW_PERSPNORM: gSPPerspNormalize( w1 ); break; } }