📄 dsp1.h
字号:
/* * Snes9x - Portable Super Nintendo Entertainment System (TM) emulator. * * (c) Copyright 1996 - 2001 Gary Henderson (gary@daniver.demon.co.uk) and * Jerremy Koot (jkoot@snes9x.com) * * Super FX C emulator code * (c) Copyright 1997 - 1999 Ivar (Ivar@snes9x.com) and * Gary Henderson. * Super FX assembler emulator code (c) Copyright 1998 zsKnight and _Demo_. * * DSP1 emulator code (c) Copyright 1998 Ivar, _Demo_ and Gary Henderson. * C4 asm and some C emulation code (c) Copyright 2000 zsKnight and _Demo_. * C4 C code (c) Copyright 2001 Gary Henderson (gary@daniver.demon.co.uk). * * DOS port code contains the works of other authors. See headers in * individual files. * * Snes9x homepage: www.snes9x.com * * Permission to use, copy, modify and distribute Snes9x in both binary and * source form, for non-commercial purposes, is hereby granted without fee, * providing that this license information and copyright notice appear with * all copies and any derived work. * * This software is provided 'as-is', without any express or implied * warranty. In no event shall the authors be held liable for any damages * arising from the use of this software. * * Snes9x is freeware for PERSONAL USE only. Commercial users should * seek permission of the copyright holders first. Commercial use includes * charging money for Snes9x or software derived from Snes9x. * * The copyright holders request that bug fixes and improvements to the code * should be forwarded to them so everyone can benefit from the modifications * in future versions. * * Super NES and Super Nintendo Entertainment System are trademarks of * Nintendo Co., Limited and its subsidiary companies. */#ifndef _DSP1_H_#define _DSP1_H_// Simple vector and matrix typestypedef double MATRIX[3][3];typedef double VECTOR[3];enum AttitudeMatrix { MatrixA, MatrixB, MatrixC };struct SDSP1 { bool8 waiting4command; bool8 first_parameter; uint8 command; uint32 in_count; uint32 in_index; uint32 out_count; uint32 out_index; uint16 parameters [10]; uint16 output [10]; // Attitude matrices MATRIX vMa; MATRIX vMb; MATRIX vMc; // Matrix and translaton vector for // transforming a 3D position into the global coordinate system, // from the view space coordinate system. MATRIX vM; VECTOR vT; // Focal distance double vFov; // A precalculated value for optimization double vPlaneD; // Raster position of horizon double vHorizon; // Convert a 2D screen coordinate to a 3D ground coordinate in global coordinate system. void ScreenToGround(VECTOR &v, double X2d, double Y2d); MATRIX &GetMatrix( AttitudeMatrix Matrix );};///////////////// DSP Commands ////////////////////// DSP1 Command 02hstruct DSP1_Parameter{ DSP1_Parameter( int16 Fx, int16 Fy, int16 Fz, uint16 Lfe, uint16 Les, int8 Aas, int8 Azs ); // Raster number of imaginary center int16 Vof; // -32768 ~ +32767 // Raster number representing // horizontal line. int16 Vva; // -32768 ~ +32767 // X,Y coordinate of the point // projected on the center of the screen // (ground coordinate) int16 Cx; // -32768 ~ +32767 int16 Cy; // -32768 ~ +32767};// DSP1 Command 0Ahstruct DSP1_Raster{ DSP1_Raster( int16 Vs ); // Linear transformation matrix elements // for each raster int16 An; int16 Bn; int16 Cn; int16 Dn;};// DSP1 Command 06hstruct DSP1_Project{ DSP1_Project( int16 x, int16 y, int16 z ); int16 H; int16 V; int16 M;};// DSP1 Command 0Ehstruct DSP1_Target{ DSP1_Target( int16 h, int16 v ); int16 X; int16 Y;};// DSP1 Command 04hstruct DSP1_Triangle{ DSP1_Triangle (int16 Theta, int16 r ); int16 S; int16 C;};// DSP1 Command 08hstruct DSP1_Radius{ DSP1_Radius( int16 x, int16 y, int16 z ); int16 Ll; int16 Lh;};// DSP1 Command 18hint16 DSP1_Range( int16 x, int16 y, int16 z, int16 r );// DSP1 Command 28hint16 DSP1_Distance( int16 x, int16 y, int16 z );// DSP1 Command 0Chstruct DSP1_Rotate{ DSP1_Rotate (int16 A, int16 x1, int16 y1); int16 x2; int16 y2;};// DSP1 Command 1Chstruct DSP1_Polar{ DSP1_Polar( int8 Za, int8 Xa, int8 Ya, int16 x, int16 y, int16 z ); int16 X; int16 Y; int16 Z;};// DSP1 Command 01h, 11h and 21hvoid DSP1_Attitude( int16 m, int8 Za, int8 Xa, int8 Ya, AttitudeMatrix Matrix );// DSP1 Command 0Dh, 1Dh and 2Dhstruct DSP1_Objective{ DSP1_Objective( int16 x, int16 y, int16 z, AttitudeMatrix Matrix ); int16 F; int16 L; int16 U;};// DSP1 Command 03h, 13h and 23hstruct DSP1_Subjective{ DSP1_Subjective( int16 F, int16 L, int16 U, AttitudeMatrix Matrix ); int16 X; int16 Y; int16 Z;};// DSP1 Command 0Bh, 1Bh and 2Bhint16 DSP1_Scalar( int16 x, int16 y, int16 z, AttitudeMatrix Matrix );// DSP1 Command 14hstruct DSP1_Gyrate{ DSP1_Gyrate( int8 Zi, int8 Xi, int8 Yi, int8 dU, int8 dF, int8 dL ); int8 Z0; int8 X0; int8 Y0;};// DSP1 Command 00hint16 DSP1_Multiply( int16 k, int16 I );// DSP1 Command 10hstruct DSP1_Inverse{ DSP1_Inverse( int16 a, int16 b ); int16 A; int16 B;};START_EXTERN_Cvoid S9xResetDSP1 ();uint8 S9xGetDSP (uint16 Address);void S9xSetDSP (uint8 Byte, uint16 Address);END_EXTERN_Cextern struct SDSP1 DSP1;#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -