📄 dsp1emu.c
字号:
matrixA2[0][0]=matrixB[0][0]; matrixA2[0][1]=matrixB[0][1]; matrixA2[0][2]=matrixB[0][2];
matrixA2[1][0]=matrixB[1][0]; matrixA2[1][1]=matrixB[1][1]; matrixA2[1][2]=matrixB[1][2];
matrixA2[2][0]=matrixB[2][0]; matrixA2[2][1]=matrixB[2][1]; matrixA2[2][2]=matrixB[2][2];
#ifdef DebugDSP1
Log_Message("OP11 ZR: %d XR: %d YR: %d SC: %d",Op11Zr,Op11Xr,Op11Yr,Op11m);
#endif
}
#else
void DSPOp11()
{
double zr,yr,xr;
zr = ((double)Op11Zr)*6.2832/65536;
xr = ((double)Op11Yr)*6.2832/65536;
yr = ((double)Op11Xr)*6.2832/65536;
matrixB[0][0]=1; matrixB[0][1]=0; matrixB[0][2]=0;
matrixB[1][0]=0; matrixB[1][1]=cos(xr); matrixB[1][2]=-sin(xr);
matrixB[2][0]=0; matrixB[2][1]=sin(xr); matrixB[2][2]=cos(xr);
matrixB2[0][0]=cos(yr); matrixB2[0][1]=0; matrixB2[0][2]=sin(yr);
matrixB2[1][0]=0; matrixB2[1][1]=1; matrixB2[1][2]=0;
matrixB2[2][0]=-sin(yr); matrixB2[2][1]=0; matrixB2[2][2]=cos(yr);
MultMatrixB(matrixB3,matrixB,matrixB2);
matrixB2[0][0]=cos(zr); matrixB2[0][1]=-sin(zr); matrixB2[0][2]=0;
matrixB2[1][0]=sin(zr); matrixB2[1][1]=cos(zr); matrixB2[1][2]=0;
matrixB2[2][0]=0; matrixB2[2][1]=0; matrixB2[2][2]=1;
MultMatrixB(matrixB,matrixB3,matrixB2);
sc2 = ((double)Op11m)/32768.0;
matrixA2[0][0]=matrixB[0][0]; matrixA2[0][1]=matrixB[0][1]; matrixA2[0][2]=matrixB[0][2];
matrixA2[1][0]=matrixB[1][0]; matrixA2[1][1]=matrixB[1][1]; matrixA2[1][2]=matrixB[1][2];
matrixA2[2][0]=matrixB[2][0]; matrixA2[2][1]=matrixB[2][1]; matrixA2[2][2]=matrixB[2][2];
#ifdef DebugDSP1
Log_Message("OP11 ZR: %d XR: %d YR: %d SC: %d",Op11Zr,Op11Xr,Op11Yr,Op11m);
#endif
}
#endif
#ifdef __OPT21__
void DSPOp21()
{
short zr,yr,xr;
zr = Angle(Op21Zr);
xr = Angle(Op21Yr);
yr = Angle(Op21Xr);
matrixB[0][0]=1; matrixB[0][1]=0; matrixB[0][2]=0;
matrixB[1][0]=0; matrixB[1][1]=Cos(xr); matrixB[1][2]=-Sin(xr);
matrixB[2][0]=0; matrixB[2][1]=Sin(xr); matrixB[2][2]=Cos(xr);
matrixB2[0][0]=Cos(yr); matrixB2[0][1]=0; matrixB2[0][2]=Sin(yr);
matrixB2[1][0]=0; matrixB2[1][1]=1; matrixB2[1][2]=0;
matrixB2[2][0]=-Sin(yr); matrixB2[2][1]=0; matrixB2[2][2]=Cos(yr);
MultMatrixB(matrixB3,matrixB,matrixB2);
matrixB2[0][0]=Cos(zr); matrixB2[0][1]=-Sin(zr); matrixB2[0][2]=0;
matrixB2[1][0]=Sin(zr); matrixB2[1][1]=Cos(zr); matrixB2[1][2]=0;
matrixB2[2][0]=0; matrixB2[2][1]=0; matrixB2[2][2]=1;
MultMatrixB(matrixB,matrixB3,matrixB2);
sc3 = ((double)Op21m)/32768.0;
matrixA3[0][0]=matrixB[0][0]; matrixA3[0][1]=matrixB[0][1]; matrixA3[0][2]=matrixB[0][2];
matrixA3[1][0]=matrixB[1][0]; matrixA3[1][1]=matrixB[1][1]; matrixA3[1][2]=matrixB[1][2];
matrixA3[2][0]=matrixB[2][0]; matrixA3[2][1]=matrixB[2][1]; matrixA3[2][2]=matrixB[2][2];
#ifdef DebugDSP1
Log_Message("OP21 ZR: %d XR: %d YR: %d",Op21Zr,Op21Xr,Op21Yr);
#endif
}
#else
void DSPOp21()
{
double zr,yr,xr;
zr = ((double)Op21Zr)*6.2832/65536;
xr = ((double)Op21Yr)*6.2832/65536;
yr = ((double)Op21Xr)*6.2832/65536;
matrixB[0][0]=1; matrixB[0][1]=0; matrixB[0][2]=0;
matrixB[1][0]=0; matrixB[1][1]=cos(xr); matrixB[1][2]=-sin(xr);
matrixB[2][0]=0; matrixB[2][1]=sin(xr); matrixB[2][2]=cos(xr);
matrixB2[0][0]=cos(yr); matrixB2[0][1]=0; matrixB2[0][2]=sin(yr);
matrixB2[1][0]=0; matrixB2[1][1]=1; matrixB2[1][2]=0;
matrixB2[2][0]=-sin(yr); matrixB2[2][1]=0; matrixB2[2][2]=cos(yr);
MultMatrixB(matrixB3,matrixB,matrixB2);
matrixB2[0][0]=cos(zr); matrixB2[0][1]=-sin(zr); matrixB2[0][2]=0;
matrixB2[1][0]=sin(zr); matrixB2[1][1]=cos(zr); matrixB2[1][2]=0;
matrixB2[2][0]=0; matrixB2[2][1]=0; matrixB2[2][2]=1;
MultMatrixB(matrixB,matrixB3,matrixB2);
sc3 = ((double)Op21m)/32768.0;
matrixA3[0][0]=matrixB[0][0]; matrixA3[0][1]=matrixB[0][1]; matrixA3[0][2]=matrixB[0][2];
matrixA3[1][0]=matrixB[1][0]; matrixA3[1][1]=matrixB[1][1]; matrixA3[1][2]=matrixB[1][2];
matrixA3[2][0]=matrixB[2][0]; matrixA3[2][1]=matrixB[2][1]; matrixA3[2][2]=matrixB[2][2];
#ifdef DebugDSP1
Log_Message("OP21 ZR: %d XR: %d YR: %d",Op21Zr,Op21Xr,Op21Yr);
#endif
}
#endif
short Op0DX;
short Op0DY;
short Op0DZ;
short Op0DF;
short Op0DL;
short Op0DU;
short Op1DX;
short Op1DY;
short Op1DZ;
short Op1DF;
short Op1DL;
short Op1DU;
short Op2DX;
short Op2DY;
short Op2DZ;
short Op2DF;
short Op2DL;
short Op2DU;
#define swap(a,b) temp=a;a=b;b=temp;
void DSPOp0D()
{
double a,b,c,d,e,f,g,h,i,det,temp;
double a2,b2,c2,d2,e2,f2,g2,h2,i2,x,y,z;
a = matrixA[0][0]; b=matrixA[0][1]; c=matrixA[0][2];
d = matrixA[1][0]; e=matrixA[1][1]; f=matrixA[1][2];
g = matrixA[2][0]; h=matrixA[2][1]; i=matrixA[2][2];
//abc
//def
//ghi
det = a*e*i+b*f*g+c*d*h-g*e*c-h*f*a-i*d*b;
if (det==0) {
Op0DF=Op0DX;
Op0DL=Op0DY;
Op0DU=Op0DZ;
#ifdef DebugDSP1
Log_Message("OP0D Error! Det == 0");
#endif
return;
}
swap(d,b); swap(g,c); swap(h,f);
b=-b; d=-d; f=-f; h=-h;
a2=(e*i-h*f)/det; b2=(d*i-g*f)/det; c2=(d*h-g*e)/det;
d2=(b*i-h*c)/det; e2=(a*i-g*c)/det; f2=(a*h-g*b)/det;
g2=(b*f-e*c)/det; h2=(a*f-d*c)/det; i2=(a*e-d*b)/det;
x=Op0DX; y=Op0DY; z=Op0DZ;
Op0DF=(short)((x*a2+y*d2+z*g2)/2*sc);
Op0DL=(short)((x*b2+y*e2+z*h2)/2*sc);
Op0DU=(short)((x*c2+y*f2+z*i2)/2*sc);
#ifdef DebugDSP1
Log_Message("OP0D X: %d Y: %d Z: %d / F: %d L: %d U: %d",Op0DX,Op0DY,Op0DZ,Op0DF,Op0DL,Op0DU);
#endif
}
void DSPOp1D()
{
double a,b,c,d,e,f,g,h,i,det,temp;
double a2,b2,c2,d2,e2,f2,g2,h2,i2,x,y,z;
a = matrixA2[0][0]; b=matrixA2[0][1]; c=matrixA2[0][2];
d = matrixA2[1][0]; e=matrixA2[1][1]; f=matrixA2[1][2];
g = matrixA2[2][0]; h=matrixA2[2][1]; i=matrixA2[2][2];
//abc
//def
//ghi
det = a*e*i+b*f*g+c*d*h-g*e*c-h*f*a-i*d*b;
if (det==0) {
Op1DF=0; Op1DL=0; Op1DU=0;
return;
}
swap(d,b); swap(g,c); swap(h,f);
b=-b; d=-d; f=-f; h=-h;
a2=(e*i-h*f)/det; b2=(d*i-g*f)/det; c2=(d*h-g*e)/det;
d2=(b*i-h*c)/det; e2=(a*i-g*c)/det; f2=(a*h-g*b)/det;
g2=(b*f-e*c)/det; h2=(a*f-d*c)/det; i2=(a*e-d*b)/det;
x=Op1DX; y=Op1DY; z=Op1DZ;
Op1DF=(short)((x*a2+y*d2+z*g2)/2*sc2);
Op1DL=(short)((x*b2+y*e2+z*h2)/2*sc2);
Op1DU=(short)((x*c2+y*f2+z*i2)/2*sc2);
#ifdef DebugDSP1
Log_Message("OP1D X: %d Y: %d Z: %d / F: %d L: %d U: %d",Op1DX,Op1DY,Op1DZ,Op1DF,Op1DL,Op1DU);
#endif
}
void DSPOp2D()
{
double a,b,c,d,e,f,g,h,i,det,temp;
double a2,b2,c2,d2,e2,f2,g2,h2,i2,x,y,z;
a = matrixA3[0][0]; b=matrixA3[0][1]; c=matrixA3[0][2];
d = matrixA3[1][0]; e=matrixA3[1][1]; f=matrixA3[1][2];
g = matrixA3[2][0]; h=matrixA3[2][1]; i=matrixA3[2][2];
//abc
//def
//ghi
det = a*e*i+b*f*g+c*d*h-g*e*c-h*f*a-i*d*b;
if (det==0) {
Op2DF=0; Op2DL=0; Op2DU=0;
return;
}
swap(d,b); swap(g,c); swap(h,f);
b=-b; d=-d; f=-f; h=-h;
a2=(e*i-h*f)/det; b2=(d*i-g*f)/det; c2=(d*h-g*e)/det;
d2=(b*i-h*c)/det; e2=(a*i-g*c)/det; f2=(a*h-g*b)/det;
g2=(b*f-e*c)/det; h2=(a*f-d*c)/det; i2=(a*e-d*b)/det;
x=Op2DX; y=Op2DY; z=Op2DZ;
Op2DF=(short)((x*a2+y*d2+z*g2)/2*sc3);
Op2DL=(short)((x*b2+y*e2+z*h2)/2*sc3);
Op2DU=(short)((x*c2+y*f2+z*i2)/2*sc3);
#ifdef DebugDSP1
Log_Message("OP2D X: %d Y: %d Z: %d / F: %d L: %d U: %d",Op2DX,Op2DY,Op2DZ,Op2DF,Op2DL,Op2DU);
#endif
}
short Op03F;
short Op03L;
short Op03U;
short Op03X;
short Op03Y;
short Op03Z;
short Op13F;
short Op13L;
short Op13U;
short Op13X;
short Op13Y;
short Op13Z;
short Op23F;
short Op23L;
short Op23U;
short Op23X;
short Op23Y;
short Op23Z;
void DSPOp03()
{
double F,L,U;
F=Op03F; L=Op03L; U=Op03U;
Op03X=(short)((F*matrixA[0][0]+L*matrixA[1][0]+U*matrixA[2][0])/2*sc);
Op03Y=(short)((F*matrixA[0][1]+L*matrixA[1][1]+U*matrixA[2][1])/2*sc);
Op03Z=(short)((F*matrixA[0][2]+L*matrixA[1][2]+U*matrixA[2][2])/2*sc);
#ifdef DebugDSP1
Log_Message("OP03 F: %d L: %d U: %d / X: %d Y: %d Z: %d",Op03F,Op03L,Op03U,Op03X,Op03Y,Op03Z);
#endif
}
void DSPOp13()
{
double F,L,U;
F=Op13F; L=Op13L; U=Op13U;
Op13X=(short)((F*matrixA2[0][0]+L*matrixA2[1][0]+U*matrixA2[2][0])/2*sc2);
Op13Y=(short)((F*matrixA2[0][1]+L*matrixA2[1][1]+U*matrixA2[2][1])/2*sc2);
Op13Z=(short)((F*matrixA2[0][2]+L*matrixA2[1][2]+U*matrixA2[2][2])/2*sc2);
#ifdef DebugDSP1
Log_Message("OP13 F: %d L: %d U: %d / X: %d Y: %d Z: %d",Op13F,Op13L,Op13U,Op13X,Op13Y,Op13Z);
#endif
}
void DSPOp23()
{
double F,L,U;
F=Op23F; L=Op23L; U=Op23U;
Op23X=(short)((F*matrixA3[0][0]+L*matrixA3[1][0]+U*matrixA3[2][0])/2*sc3);
Op23Y=(short)((F*matrixA3[0][1]+L*matrixA3[1][1]+U*matrixA3[2][1])/2*sc3);
Op23Z=(short)((F*matrixA3[0][2]+L*matrixA3[1][2]+U*matrixA3[2][2])/2*sc3);
#ifdef DebugDSP1
Log_Message("OP23 F: %d L: %d U: %d / X: %d Y: %d Z: %d",Op23F,Op23L,Op23U,Op23X,Op23Y,Op23Z);
#endif
}
short Op14Zr;
short Op14Xr;
short Op14Yr;
short Op14U;
short Op14F;
short Op14L;
short Op14Zrr;
short Op14Xrr;
short Op14Yrr;
double Op14Temp;
void DSPOp14()
{
Op14Temp=(Op14Zr*6.2832/65536.0)+(1/cos(Op14Xr*6.2832/65536.0))*((Op14U*6.2832/65536.0)*cos(Op14Yr*6.2832/65536.0)-(Op14F*6.2832/65536.0)*sin(Op14Yr*6.2832/65536.0));
Op14Zrr=(short)(Op14Temp*65536.0/6.2832);
Op14Temp=(Op14Xr*6.2832/65536.0)+((Op14U*6.2832/65536.0)*sin(Op14Yr*6.2832/65536.0)+(Op14F*6.2832/65536.0)*cos(Op14Yr*6.2832/65536.0));
Op14Xrr=(short)(Op14Temp*65536.0/6.2832);
Op14Temp=(Op14Yr*6.2832/65536.0)-tan(Op14Xr*6.2832/65536.0)*((Op14U*6.2832/65536.0)*cos(Op14Yr*6.2832/65536.0)+(Op14F*6.2832/65536.0)*sin(Op14Yr*6.2832/65536.0))+(Op14L*6.2832/65536.0);
Op14Yrr=(short)(Op14Temp*65536.0/6.2832);
#ifdef DebugDSP1
Log_Message("OP14 X:%d Y%d Z:%D U:%d F:%d L:%d",Op14Xr,Op14Yr,Op14Zr,Op14U,Op14F,Op14L);
Log_Message("OP14 X:%d Y%d Z:%D",Op14Xrr,Op14Yrr,Op14Zrr);
#endif
}
short Op0EH;
short Op0EV;
short Op0EX;
short Op0EY;
void DSPOp0E()
{
// screen Directions UP
RVPos = Op0EV;
RHPos = Op0EH;
GetRXYPos();
Op0EX = RXRes;
Op0EY = RYRes;
#ifdef DebugDSP1
Log_Message("OP0E COORDINATE H:%d V:%d X:%d Y:%d",Op0EH,Op0EV,Op0EX,Op0EY);
#endif
}
short Op0BX;
short Op0BY;
short Op0BZ;
short Op0BS;
short Op1BX;
short Op1BY;
short Op1BZ;
short Op1BS;
short Op2BX;
short Op2BY;
short Op2BZ;
short Op2BS;
void DSPOp0B()
{
Op0BS = (Op0BX*matrixA[0][0]+Op0BY*matrixA2[0][1]+Op0BZ*matrixA2[0][2]);
#ifdef DebugDSP1
Log_Message("OP0B");
#endif
}
void DSPOp1B()
{
Op1BS = (Op1BX*matrixA2[0][0]+Op1BY*matrixA2[0][1]+Op1BZ*matrixA2[0][2]);
#ifdef DebugDSP1
Log_Message("OP1B X: %d Y: %d Z: %d S: %d",Op1BX,Op1BY,Op1BZ,Op1BS);
Log_Message(" MX: %d MY: %d MZ: %d Scale: %d",(short)(matrixA2[0][0]*100),(short)(matrixA2[0][1]*100),(short)(matrixA2[0][2]*100),(short)(sc2*100));
#endif
}
void DSPOp2B()
{
Op2BS = (Op2BX*matrixA3[0][0]+Op2BY*matrixA3[0][1]+Op2BZ*matrixA3[0][2]);
#ifdef DebugDSP1
Log_Message("OP2B");
#endif
}
short Op08X,Op08Y,Op08Z,Op08Ll,Op08Lh;
long Op08Size;
void DSPOp08()
{
Op08Size=(Op08X*Op08X+Op08Y*Op08Y+Op08Z*Op08Z)*2;
Op08Ll = Op08Size&0xFFFF;
Op08Lh = (Op08Size>>16) & 0xFFFF;
#ifdef DebugDSP1
Log_Message("OP08 %d,%d,%d",Op08X,Op08Y,Op08Z);
Log_Message("OP08 ((Op08X^2)+(Op08Y^2)+(Op08X^2))=%x",Op08Size );
#endif
}
short Op18X,Op18Y,Op18Z,Op18R,Op18D;
void DSPOp18()
{
double x,y,z,r;
x=Op18X; y=Op18Y; z=Op18Z; r=Op18R;
r = (x*x+y*y+z*z-r*r);
if (r>32767) r=32767;
if (r<-32768) r=-32768;
Op18D=(short)r;
#ifdef DebugDSP1
Log_Message("OP18 X: %d Y: %d Z: %d R: %D DIFF %d",Op18X,Op18Y,Op18Z,Op18D);
#endif
}
short Op28X;
short Op28Y;
short Op28Z;
short Op28R;
void DSPOp28()
{
Op28R=(short)sqrt(Op28X*Op28X+Op28Y*Op28Y+Op28Z*Op28Z);
#ifdef DebugDSP1
Log_Message("OP28 X:%d Y:%d Z:%d",Op28X,Op28Y,Op28Z);
Log_Message("OP28 Vector Length %d",Op28R);
#endif
}
short Op1CAZ;
unsigned short Op1CX,Op1CY,Op1CZ;
short Op1CXBR,Op1CYBR,Op1CZBR,Op1CXAR,Op1CYAR,Op1CZAR;
short Op1CX1;
short Op1CY1;
short Op1CZ1;
short Op1CX2;
short Op1CY2;
short Op1CZ2;
#ifdef __OPT1C__
void DSPOp1C()
{
short ya,xa,za;
ya = Angle(Op1CX);
xa = Angle(Op1CY);
za = Angle(Op1CZ);
// rotate around Z
Op1CX1=(Op1CXBR*Cos(za)+Op1CYBR*Sin(za));
Op1CY1=(Op1CXBR*-Sin(za)+Op1CYBR*Cos(za));
Op1CZ1=Op1CZBR;
// rotate around Y
Op1CX2=(Op1CX1*Cos(ya)+Op1CZ1*-Sin(ya));
Op1CY2=Op1CY1;
Op1CZ2=(Op1CX1*Sin(ya)+Op1CZ1*Cos(ya));
// rotate around X
Op1CXAR=Op1CX2;
Op1CYAR=(Op1CY2*Cos(xa)+Op1CZ2*Sin(xa));
Op1CZAR=(Op1CY2*-Sin(xa)+Op1CZ2*Cos(xa));
#ifdef DebugDSP1
Log_Message("OP1C Apply Matrix CX:%d CY:%d CZ",Op1CXAR,Op1CYAR,Op1CZAR);
#endif
}
#else
void DSPOp1C()
{
double ya,xa,za;
ya = Op1CX/65536.0*PI*2;
xa = Op1CY/65536.0*PI*2;
za = Op1CZ/65536.0*PI*2;
// rotate around Z
Op1CX1=(Op1CXBR*cos(za)+Op1CYBR*sin(za));
Op1CY1=(Op1CXBR*-sin(za)+Op1CYBR*cos(za));
Op1CZ1=Op1CZBR;
// rotate around Y
Op1CX2=(Op1CX1*cos(ya)+Op1CZ1*-sin(ya));
Op1CY2=Op1CY1;
Op1CZ2=(Op1CX1*sin(ya)+Op1CZ1*cos(ya));
// rotate around X
Op1CXAR=Op1CX2;
Op1CYAR=(Op1CY2*cos(xa)+Op1CZ2*sin(xa));
Op1CZAR=(Op1CY2*-sin(xa)+Op1CZ2*cos(xa));
#ifdef DebugDSP1
Log_Message("OP1C Apply Matrix CX:%d CY:%d CZ",Op1CXAR,Op1CYAR,Op1CZAR);
#endif
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -