aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authornotaz2012-11-30 02:51:45 +0200
committernotaz2012-12-02 02:37:10 +0200
commitda710571b75db7031b82924ab3ad47eb645ce215 (patch)
tree91c3c707a6133fa371dae5a9c60a121d18ab55a5 /include
parentc02c3b656781a406fc4f586ac0923529de186916 (diff)
downloadpcsx_rearmed-da710571b75db7031b82924ab3ad47eb645ce215.tar.gz
pcsx_rearmed-da710571b75db7031b82924ab3ad47eb645ce215.tar.bz2
pcsx_rearmed-da710571b75db7031b82924ab3ad47eb645ce215.zip
mave plugin and core shared includes to single location
Diffstat (limited to 'include')
-rw-r--r--include/config.h7
-rw-r--r--include/pcnt.h132
-rw-r--r--include/psemu_plugin_defs.h285
3 files changed, 424 insertions, 0 deletions
diff --git a/include/config.h b/include/config.h
new file mode 100644
index 0000000..dcfb598
--- /dev/null
+++ b/include/config.h
@@ -0,0 +1,7 @@
+#define MAXPATHLEN 256
+//#define NOPSXREC
+#define __LINUX__ 1
+#define PACKAGE_NAME "pcsx"
+#define PACKAGE_VERSION "1.9"
+#define DEF_PLUGIN_DIR "."
+//#define EMU_LOG printf
diff --git a/include/pcnt.h b/include/pcnt.h
new file mode 100644
index 0000000..9ddd500
--- /dev/null
+++ b/include/pcnt.h
@@ -0,0 +1,132 @@
+
+enum pcounters {
+ PCNT_ALL,
+ PCNT_GPU,
+ PCNT_SPU,
+ PCNT_BLIT,
+ PCNT_GTE,
+ PCNT_TEST,
+ PCNT_CNT
+};
+
+#ifdef PCNT
+
+#if defined(__ARM_ARCH_7A__) || defined(ARM1176)
+#define PCNT_DIV 1000
+#else
+#include <sys/time.h>
+#define PCNT_DIV 1
+#endif
+
+static const char *pcnt_names[PCNT_CNT] = { "", "gpu", "spu", "blit", "gte", "test" };
+
+#define PCNT_FRAMES 10
+
+extern unsigned int pcounters[PCNT_CNT];
+extern unsigned int pcounter_starts[PCNT_CNT];
+
+#define pcnt_start(id) \
+ pcounter_starts[id] = pcnt_get()
+
+#define pcnt_end(id) \
+ pcounters[id] += pcnt_get() - pcounter_starts[id]
+
+void pcnt_hook_plugins(void);
+
+static inline void pcnt_print(float fps)
+{
+ static int print_counter;
+ unsigned int total, rem;
+ int i;
+
+ for (i = 0; i < PCNT_CNT; i++)
+ pcounters[i] /= PCNT_DIV * PCNT_FRAMES;
+
+ rem = total = pcounters[PCNT_ALL];
+ for (i = 1; i < PCNT_CNT; i++)
+ rem -= pcounters[i];
+ if (!total)
+ total++;
+
+ if (--print_counter < 0) {
+ printf(" ");
+ for (i = 1; i < PCNT_CNT; i++)
+ printf("%5s ", pcnt_names[i]);
+ printf("%5s\n", "rem");
+ print_counter = 30;
+ }
+
+ printf("%4.1f ", fps);
+#if 0
+ static float pcounters_all[PCNT_CNT+1];
+ static int pcounter_samples;
+ pcounter_samples++;
+
+ for (i = 1; i < PCNT_CNT; i++) {
+ pcounters_all[i] += pcounters[i];
+ printf("%5.0f ", pcounters_all[i] / pcounter_samples);
+ }
+ pcounters_all[i] += rem;
+ printf("%5.0f\n", pcounters_all[i] / pcounter_samples);
+#else
+ for (i = 1; i < PCNT_CNT; i++)
+ printf("%5u ", pcounters[i]);
+ printf("%5u (", rem);
+ for (i = 1; i < PCNT_CNT; i++)
+ printf("%2u ", pcounters[i] * 100 / total);
+ printf("%2u) %u\n", rem * 100 / total, total);
+#endif
+ memset(pcounters, 0, sizeof(pcounters));
+}
+
+static inline unsigned int pcnt_get(void)
+{
+ unsigned int val;
+#ifdef __ARM_ARCH_7A__
+ __asm__ volatile("mrc p15, 0, %0, c9, c13, 0"
+ : "=r"(val));
+#elif defined(ARM1176)
+ __asm__ volatile("mrc p15, 0, %0, c15, c12, 1"
+ : "=r"(val));
+#else
+ // all slow on ARM :(
+ //struct timespec tv;
+ //clock_gettime(CLOCK_MONOTONIC_RAW, &tv);
+ //val = tv.tv_sec * 1000000000 + tv.tv_nsec;
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ val = tv.tv_sec * 1000000 + tv.tv_usec;
+#endif
+ return val;
+}
+
+static inline void pcnt_init(void)
+{
+#ifdef __ARM_ARCH_7A__
+ int v;
+ asm volatile("mrc p15, 0, %0, c9, c12, 0" : "=r"(v));
+ v |= 5; // master enable, ccnt reset
+ v &= ~8; // ccnt divider 0
+ asm volatile("mcr p15, 0, %0, c9, c12, 0" :: "r"(v));
+ // enable cycle counter
+ asm volatile("mcr p15, 0, %0, c9, c12, 1" :: "r"(1<<31));
+#elif defined(ARM1176)
+ int v;
+ asm volatile("mrc p15, 0, %0, c15, c12, 0" : "=r"(v));
+ v |= 5; // master enable, ccnt reset
+ v &= ~8; // ccnt divider 0
+ asm volatile("mcr p15, 0, %0, c15, c12, 0" :: "r"(v));
+#endif
+}
+
+void pcnt_gte_start(int op);
+void pcnt_gte_end(int op);
+
+#else
+
+#define pcnt_start(id)
+#define pcnt_end(id)
+#define pcnt_hook_plugins()
+#define pcnt_print(fps)
+
+#endif
diff --git a/include/psemu_plugin_defs.h b/include/psemu_plugin_defs.h
new file mode 100644
index 0000000..3926ccd
--- /dev/null
+++ b/include/psemu_plugin_defs.h
@@ -0,0 +1,285 @@
+#ifndef _PSEMU_PLUGIN_DEFS_H
+#define _PSEMU_PLUGIN_DEFS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// header version
+#define _PPDK_HEADER_VERSION 3
+
+#define PLUGIN_VERSION 1
+
+// plugin type returned by PSEgetLibType (types can be merged if plugin is multi type!)
+#define PSE_LT_CDR 1
+#define PSE_LT_GPU 2
+#define PSE_LT_SPU 4
+#define PSE_LT_PAD 8
+#define PSE_LT_NET 16
+
+// DLL function return codes
+#define PSE_ERR_SUCCESS 0 // every function in DLL if completed sucessfully should return this value
+#define PSE_ERR_FATAL -1 // undefined error but fatal one, that kills all functionality
+
+// XXX_Init return values
+// Those return values apply to all libraries
+// currently obsolete - preserved for compatibilty
+
+#define PSE_INIT_ERR_SUCCESS 0 // initialization went OK
+#define PSE_INIT_ERR_NOTCONFIGURED -2 // this driver is not configured
+#define PSE_INIT_ERR_NOHARDWARE -3 // this driver can not operate properly on this hardware or hardware is not detected
+
+/* GPU PlugIn */
+
+// GPU_Test return values
+
+// sucess, everything configured, and went OK.
+#define PSE_GPU_ERR_SUCCESS 0
+
+// ERRORS
+// this error might be returned as critical error but none of below
+#define PSE_GPU_ERR -20
+
+
+// this driver is not configured
+#define PSE_GPU_ERR_NOTCONFIGURED PSE_GPU_ERR - 1
+// this driver failed Init
+#define PSE_GPU_ERR_INIT PSE_GPU_ERR - 2
+
+// WARNINGS
+// this warning might be returned as undefined warning but allowing driver to continue
+#define PSE_GPU_WARN 20
+
+// GPU_Query - will be implemented soon
+
+typedef struct
+{
+ unsigned int flags;
+ unsigned int status;
+ void* window;
+ unsigned char reserved[100];
+} gpuQueryS;
+
+// gpuQueryS.flags
+// if driver can operate in both modes it must support GPU_changeMode();
+#define PSE_GPU_FLAGS_FULLSCREEN 1 // this driver can operate in fullscreen mode
+#define PSE_GPU_FLAGS_WINDOWED 2 // this driver can operate in windowed mode
+
+// gpuQueryS.status
+#define PSE_GPU_STATUS_WINDOWWRONG 1 // this driver cannot operate in this windowed mode
+
+// GPU_Query End - will be implemented in v2
+
+
+/* CDR PlugIn */
+
+// CDR_Test return values
+
+// sucess, everything configured, and went OK.
+#define PSE_CDR_ERR_SUCCESS 0
+
+// general failure (error undefined)
+#define PSE_CDR_ERR_FAILURE -1
+
+// ERRORS
+#define PSE_CDR_ERR -40
+// this driver is not configured
+#define PSE_CDR_ERR_NOTCONFIGURED PSE_CDR_ERR - 0
+// if this driver is unable to read data from medium
+#define PSE_CDR_ERR_NOREAD PSE_CDR_ERR - 1
+
+// WARNINGS
+#define PSE_CDR_WARN 40
+// if this driver emulates lame mode ie. can read only 2048 tracks and sector header is emulated
+// this might happen to CDROMS that do not support RAW mode reading - surelly it will kill many games
+#define PSE_CDR_WARN_LAMECD PSE_CDR_WARN + 0
+
+
+
+
+/* SPU PlugIn */
+
+// some info retricted (now!)
+
+// sucess, everything configured, and went OK.
+#define PSE_SPU_ERR_SUCCESS 0
+
+// ERRORS
+// this error might be returned as critical error but none of below
+#define PSE_SPU_ERR -60
+
+// this driver is not configured
+#define PSE_SPU_ERR_NOTCONFIGURED PSE_SPU_ERR - 1
+// this driver failed Init
+#define PSE_SPU_ERR_INIT PSE_SPU_ERR - 2
+
+
+// WARNINGS
+// this warning might be returned as undefined warning but allowing driver to continue
+#define PSE_SPU_WARN 60
+
+
+
+
+/* PAD PlugIn */
+
+/*
+
+ functions that must be exported from PAD Plugin
+
+ long PADinit(long flags); // called only once when PSEmu Starts
+ void PADshutdown(void); // called when PSEmu exits
+ long PADopen(PadInitS *); // called when PSEmu is running program
+ long PADclose(void);
+ long PADconfigure(void);
+ void PADabout(void);
+ long PADtest(void); // called from Configure Dialog and after PADopen();
+ long PADquery(void);
+
+ unsigned char PADstartPoll(int);
+ unsigned char PADpoll(unsigned char);
+
+*/
+
+// PADquery responses (notice - values ORed)
+// PSEmu will use them also in PADinit to tell Plugin which Ports will use
+// notice that PSEmu will call PADinit and PADopen only once when they are from
+// same plugin
+
+// might be used in port 1
+#define PSE_PAD_USE_PORT1 1
+// might be used in port 2
+#define PSE_PAD_USE_PORT2 2
+
+
+
+// MOUSE SCPH-1030
+#define PSE_PAD_TYPE_MOUSE 1
+// NEGCON - 16 button analog controller SLPH-00001
+#define PSE_PAD_TYPE_NEGCON 2
+// GUN CONTROLLER - gun controller SLPH-00014 from Konami
+#define PSE_PAD_TYPE_GUN 3
+// STANDARD PAD SCPH-1080, SCPH-1150
+#define PSE_PAD_TYPE_STANDARD 4
+// ANALOG JOYSTICK SCPH-1110
+#define PSE_PAD_TYPE_ANALOGJOY 5
+// GUNCON - gun controller SLPH-00034 from Namco
+#define PSE_PAD_TYPE_GUNCON 6
+// ANALOG CONTROLLER SCPH-1150
+#define PSE_PAD_TYPE_ANALOGPAD 7
+
+
+// sucess, everything configured, and went OK.
+#define PSE_PAD_ERR_SUCCESS 0
+// general plugin failure (undefined error)
+#define PSE_PAD_ERR_FAILURE -1
+
+
+// ERRORS
+// this error might be returned as critical error but none of below
+#define PSE_PAD_ERR -80
+// this driver is not configured
+#define PSE_PAD_ERR_NOTCONFIGURED PSE_PAD_ERR - 1
+// this driver failed Init
+#define PSE_PAD_ERR_INIT PSE_PAD_ERR - 2
+
+
+// WARNINGS
+// this warning might be returned as undefined warning but allowing driver to continue
+#define PSE_PAD_WARN 80
+
+
+typedef struct
+{
+ // controler type - fill it withe predefined values above
+ unsigned char controllerType;
+
+ // status of buttons - every controller fills this field
+ unsigned short buttonStatus;
+
+ // for analog pad fill those next 4 bytes
+ // values are analog in range 0-255 where 127 is center position
+ unsigned char rightJoyX, rightJoyY, leftJoyX, leftJoyY;
+
+ // for mouse fill those next 2 bytes
+ // values are in range -128 - 127
+ unsigned char moveX, moveY;
+
+ unsigned char reserved[91];
+
+} PadDataS;
+
+/* NET PlugIn v2 */
+/* Added by linuzappz@pcsx.net */
+
+/* Modes bits for NETsendData/NETrecvData */
+#define PSE_NET_BLOCKING 0x00000000
+#define PSE_NET_NONBLOCKING 0x00000001
+
+/* note: unsupported fields should be zeroed.
+
+typedef struct {
+ char EmuName[32];
+ char CdromID[9]; // ie. 'SCPH12345', no \0 trailing character
+ char CdromLabel[11];
+ void *psxMem;
+ GPUshowScreenPic GPU_showScreenPic;
+ GPUdisplayText GPU_displayText;
+ PADsetSensitive PAD_setSensitive;
+ char GPUpath[256];
+ char SPUpath[256];
+ char CDRpath[256];
+ char MCD1path[256];
+ char MCD2path[256];
+ char BIOSpath[256]; // 'HLE' for internal bios
+ char Unused[1024];
+} netInfo;
+
+*/
+
+/*
+ basic funcs:
+
+ long NETopen(HWND hWnd)
+ opens the connection.
+ shall return 0 on success, else -1.
+ -1 is also returned if the user selects offline mode.
+
+ long NETclose()
+ closes the connection.
+ shall return 0 on success, else -1.
+
+ void NETpause()
+ this is called when the user paused the emulator.
+
+ void NETresume()
+ this is called when the user resumed the emulator.
+
+ long NETqueryPlayer()
+ returns player number
+
+ long NETsendPadData(void *pData, int Size)
+ this should be called for the first pad only on each side.
+
+ long NETrecvPadData(void *pData, int Pad)
+ call this for Pad 1/2 to get the data sent by the above func.
+
+ extended funcs:
+
+ long NETsendData(void *pData, int Size, int Mode)
+ sends Size bytes from pData to the other side.
+
+ long NETrecvData(void *pData, int Size, int Mode)
+ receives Size bytes from pData to the other side.
+
+ void NETsetInfo(netInfo *info);
+ sets the netInfo struct.
+
+ void NETkeypressed(int key) (linux only)
+ key is a XK_?? (X11) keycode.
+*/
+
+#ifdef __cplusplus
+}
+#endif
+#endif // _PSEMU_PLUGIN_DEFS_H