summaryrefslogtreecommitdiff
path: root/src/dsp1_gp32.h
diff options
context:
space:
mode:
authorToad King2012-06-14 03:21:06 -0400
committerToad King2012-06-14 03:21:06 -0400
commit6fb0c7a7a53e1eba7a0f5dc5b1ade312a0d76119 (patch)
tree885cf7f507139b795ba7b2a6fb829dc044da39dd /src/dsp1_gp32.h
downloadsnes9x2002-6fb0c7a7a53e1eba7a0f5dc5b1ade312a0d76119.tar.gz
snes9x2002-6fb0c7a7a53e1eba7a0f5dc5b1ade312a0d76119.tar.bz2
snes9x2002-6fb0c7a7a53e1eba7a0f5dc5b1ade312a0d76119.zip
initial pocketsnes commit
Diffstat (limited to 'src/dsp1_gp32.h')
-rw-r--r--src/dsp1_gp32.h244
1 files changed, 244 insertions, 0 deletions
diff --git a/src/dsp1_gp32.h b/src/dsp1_gp32.h
new file mode 100644
index 0000000..bd3ced1
--- /dev/null
+++ b/src/dsp1_gp32.h
@@ -0,0 +1,244 @@
+/*
+ * Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
+ *
+ * (c) Copyright 1996 - 2001 Gary Henderson (gary.henderson@ntlworld.com) 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.henderson@ntlworld.com).
+ *
+ * DOS port code contains the works of other authors. See headers in
+ * individual files.
+ *
+ * Snes9x homepage: http://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 types
+typedef 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 02h
+struct 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 0Ah
+struct DSP1_Raster
+{
+ DSP1_Raster( int16 Vs );
+
+ // Linear transformation matrix elements
+ // for each raster
+ int16 An;
+ int16 Bn;
+ int16 Cn;
+ int16 Dn;
+};
+
+// DSP1 Command 06h
+struct DSP1_Project
+{
+ DSP1_Project( int16 x, int16 y, int16 z );
+
+ int16 H;
+ int16 V;
+ int16 M;
+};
+
+// DSP1 Command 0Eh
+struct DSP1_Target
+{
+ DSP1_Target( int16 h, int16 v );
+
+ int16 X;
+ int16 Y;
+};
+
+// DSP1 Command 04h
+struct DSP1_Triangle
+{
+ DSP1_Triangle (int16 Theta, int16 r );
+ int16 S;
+ int16 C;
+};
+
+// DSP1 Command 08h
+struct DSP1_Radius
+{
+ DSP1_Radius( int16 x, int16 y, int16 z );
+ int16 Ll;
+ int16 Lh;
+};
+
+// DSP1 Command 18h
+int16 DSP1_Range( int16 x, int16 y, int16 z, int16 r );
+
+// DSP1 Command 28h
+int16 DSP1_Distance( int16 x, int16 y, int16 z );
+
+// DSP1 Command 0Ch
+struct DSP1_Rotate
+{
+ DSP1_Rotate (int16 A, int16 x1, int16 y1);
+
+ int16 x2;
+ int16 y2;
+};
+
+// DSP1 Command 1Ch
+struct 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 21h
+void DSP1_Attitude( int16 m, int8 Za, int8 Xa, int8 Ya, AttitudeMatrix Matrix );
+
+// DSP1 Command 0Dh, 1Dh and 2Dh
+struct DSP1_Objective
+{
+ DSP1_Objective( int16 x, int16 y, int16 z, AttitudeMatrix Matrix );
+
+ int16 F;
+ int16 L;
+ int16 U;
+};
+
+// DSP1 Command 03h, 13h and 23h
+struct DSP1_Subjective
+{
+ DSP1_Subjective( int16 F, int16 L, int16 U, AttitudeMatrix Matrix );
+
+ int16 X;
+ int16 Y;
+ int16 Z;
+};
+
+// DSP1 Command 0Bh, 1Bh and 2Bh
+int16 DSP1_Scalar( int16 x, int16 y, int16 z, AttitudeMatrix Matrix );
+
+// DSP1 Command 14h
+struct DSP1_Gyrate
+{
+ DSP1_Gyrate( int8 Zi, int8 Xi, int8 Yi,
+ int8 dU, int8 dF, int8 dL );
+
+ int8 Z0;
+ int8 X0;
+ int8 Y0;
+};
+
+// DSP1 Command 00h
+int16 DSP1_Multiply( int16 k, int16 I );
+
+// DSP1 Command 10h
+struct DSP1_Inverse
+{
+ DSP1_Inverse( int16 a, int16 b );
+
+ int16 A;
+ int16 B;
+};
+
+START_EXTERN_C
+void S9xResetDSP1 ();
+uint8 S9xGetDSP (uint16 Address);
+void S9xSetDSP (uint8 Byte, uint16 Address);
+END_EXTERN_C
+
+#ifndef __GP32__
+extern struct SDSP1 DSP1;
+#else
+extern "C" struct SDSP1 DSP1;
+#endif
+
+#endif