mirror of
https://github.com/mupen64plus/mupen64plus-oldsvn.git
synced 2025-04-02 10:52:35 -04:00
321 lines
11 KiB
C
321 lines
11 KiB
C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
* Mupen64plus - plugin.h *
|
|
* Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ *
|
|
* Copyright (C) 2002 Hacktarux *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the *
|
|
* Free Software Foundation, Inc., *
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
#ifndef PLUGIN_H
|
|
#define PLUGIN_H
|
|
|
|
#include "winlnxdefs.h"
|
|
#include "util.h" // list_t type
|
|
|
|
//--------------------- plugin storage type ----------------
|
|
typedef struct _plugin
|
|
{
|
|
char *file_name;
|
|
char *plugin_name;
|
|
void *handle;
|
|
int type;
|
|
} plugin;
|
|
|
|
extern list_t g_PluginList;
|
|
|
|
int plugin_scan_file(const char *filepath, WORD PluginType);
|
|
void plugin_scan_directory(const char *plugindir);
|
|
void plugin_set_dirs(char* configdir, char* installdir);
|
|
void plugin_load_plugins(const char *gfx_name,
|
|
const char *audio_name,
|
|
const char *input_name,
|
|
const char *RSP_name);
|
|
void plugin_close_plugins();
|
|
void plugin_delete_list();
|
|
plugin *plugin_get_by_name(const char *name);
|
|
char *plugin_filename_by_name(const char *name);
|
|
char *plugin_name_by_filename(const char *filename);
|
|
|
|
void plugin_exec_config_with_wid(const char *name, HWND wid);
|
|
void plugin_exec_test_with_wid(const char *name, HWND wid);
|
|
void plugin_exec_about_with_wid(const char *name, HWND wid);
|
|
|
|
void plugin_exec_config(const char *name);
|
|
void plugin_exec_test(const char *name);
|
|
void plugin_exec_about(const char *name);
|
|
|
|
void plugin_load_gfx_plugin(const char* gfx_name);
|
|
void plugin_load_audio_plugin(const char* audio_name);
|
|
void plugin_load_input_plugin(const char* input_name);
|
|
void plugin_load_rsp_plugin(const char* RSP_name);
|
|
|
|
/* Plugin types */
|
|
#define PLUGIN_TYPE_RSP 1
|
|
#define PLUGIN_TYPE_GFX 2
|
|
#define PLUGIN_TYPE_AUDIO 3
|
|
#define PLUGIN_TYPE_CONTROLLER 4
|
|
|
|
/*** Controller plugin's ****/
|
|
#define PLUGIN_NONE 1
|
|
#define PLUGIN_MEMPAK 2
|
|
#define PLUGIN_RUMBLE_PAK 3 // not implemeted for non raw data
|
|
#define PLUGIN_TANSFER_PAK 4 // not implemeted for non raw data
|
|
#define PLUGIN_RAW 5 // the controller plugin is passed in raw data
|
|
|
|
/*** Audio plugin system types ***/
|
|
#define SYSTEM_NTSC 0
|
|
#define SYSTEM_PAL 1
|
|
#define SYSTEM_MPAL 2
|
|
|
|
/***** Structures *****/
|
|
typedef struct {
|
|
WORD Version;
|
|
WORD Type;
|
|
char Name[100]; /* Name of the DLL */
|
|
|
|
/* If DLL supports memory these memory options then set them to TRUE or FALSE
|
|
if it does not support it */
|
|
BOOL NormalMemory; /* a normal BYTE array */
|
|
BOOL MemoryBswaped; /* a normal BYTE array where the memory has been pre
|
|
bswap on a dword (32 bits) boundry */
|
|
} PLUGIN_INFO;
|
|
|
|
typedef struct {
|
|
HINSTANCE hInst;
|
|
BOOL MemoryBswaped; /* If this is set to TRUE, then the memory has been pre
|
|
bswap on a dword (32 bits) boundry */
|
|
BYTE * RDRAM;
|
|
BYTE * DMEM;
|
|
BYTE * IMEM;
|
|
|
|
DWORD * MI_INTR_REG;
|
|
|
|
DWORD * SP_MEM_ADDR_REG;
|
|
DWORD * SP_DRAM_ADDR_REG;
|
|
DWORD * SP_RD_LEN_REG;
|
|
DWORD * SP_WR_LEN_REG;
|
|
DWORD * SP_STATUS_REG;
|
|
DWORD * SP_DMA_FULL_REG;
|
|
DWORD * SP_DMA_BUSY_REG;
|
|
DWORD * SP_PC_REG;
|
|
DWORD * SP_SEMAPHORE_REG;
|
|
|
|
DWORD * DPC_START_REG;
|
|
DWORD * DPC_END_REG;
|
|
DWORD * DPC_CURRENT_REG;
|
|
DWORD * DPC_STATUS_REG;
|
|
DWORD * DPC_CLOCK_REG;
|
|
DWORD * DPC_BUFBUSY_REG;
|
|
DWORD * DPC_PIPEBUSY_REG;
|
|
DWORD * DPC_TMEM_REG;
|
|
|
|
void (*CheckInterrupts)( void );
|
|
void (*ProcessDlistList)( void );
|
|
void (*ProcessAlistList)( void );
|
|
void (*ProcessRdpList)( void );
|
|
void (*ShowCFB)( void );
|
|
} RSP_INFO;
|
|
|
|
typedef struct {
|
|
HWND hWnd; /* Render window */
|
|
HWND hStatusBar; /* if render window does not have a status bar then this is NULL */
|
|
|
|
BOOL MemoryBswaped; // If this is set to TRUE, then the memory has been pre
|
|
// bswap on a dword (32 bits) boundry
|
|
// eg. the first 8 bytes are stored like this:
|
|
// 4 3 2 1 8 7 6 5
|
|
|
|
BYTE * HEADER; // This is the rom header (first 40h bytes of the rom
|
|
// This will be in the same memory format as the rest of the memory.
|
|
BYTE * RDRAM;
|
|
BYTE * DMEM;
|
|
BYTE * IMEM;
|
|
|
|
DWORD * MI_INTR_REG;
|
|
|
|
DWORD * DPC_START_REG;
|
|
DWORD * DPC_END_REG;
|
|
DWORD * DPC_CURRENT_REG;
|
|
DWORD * DPC_STATUS_REG;
|
|
DWORD * DPC_CLOCK_REG;
|
|
DWORD * DPC_BUFBUSY_REG;
|
|
DWORD * DPC_PIPEBUSY_REG;
|
|
DWORD * DPC_TMEM_REG;
|
|
|
|
DWORD * VI_STATUS_REG;
|
|
DWORD * VI_ORIGIN_REG;
|
|
DWORD * VI_WIDTH_REG;
|
|
DWORD * VI_INTR_REG;
|
|
DWORD * VI_V_CURRENT_LINE_REG;
|
|
DWORD * VI_TIMING_REG;
|
|
DWORD * VI_V_SYNC_REG;
|
|
DWORD * VI_H_SYNC_REG;
|
|
DWORD * VI_LEAP_REG;
|
|
DWORD * VI_H_START_REG;
|
|
DWORD * VI_V_START_REG;
|
|
DWORD * VI_V_BURST_REG;
|
|
DWORD * VI_X_SCALE_REG;
|
|
DWORD * VI_Y_SCALE_REG;
|
|
|
|
void (*CheckInterrupts)( void );
|
|
} GFX_INFO;
|
|
|
|
typedef struct {
|
|
HWND hwnd;
|
|
HINSTANCE hinst;
|
|
|
|
BOOL MemoryBswaped; // If this is set to TRUE, then the memory has been pre
|
|
// bswap on a dword (32 bits) boundry
|
|
// eg. the first 8 bytes are stored like this:
|
|
// 4 3 2 1 8 7 6 5
|
|
BYTE * HEADER; // This is the rom header (first 40h bytes of the rom
|
|
// This will be in the same memory format as the rest of the memory.
|
|
BYTE * RDRAM;
|
|
BYTE * DMEM;
|
|
BYTE * IMEM;
|
|
|
|
DWORD * MI_INTR_REG;
|
|
|
|
DWORD * AI_DRAM_ADDR_REG;
|
|
DWORD * AI_LEN_REG;
|
|
DWORD * AI_CONTROL_REG;
|
|
DWORD * AI_STATUS_REG;
|
|
DWORD * AI_DACRATE_REG;
|
|
DWORD * AI_BITRATE_REG;
|
|
|
|
void (*CheckInterrupts)( void );
|
|
} AUDIO_INFO;
|
|
|
|
typedef struct {
|
|
BOOL Present;
|
|
BOOL RawData;
|
|
int Plugin;
|
|
} CONTROL;
|
|
|
|
typedef union {
|
|
DWORD Value;
|
|
struct {
|
|
unsigned R_DPAD : 1;
|
|
unsigned L_DPAD : 1;
|
|
unsigned D_DPAD : 1;
|
|
unsigned U_DPAD : 1;
|
|
unsigned START_BUTTON : 1;
|
|
unsigned Z_TRIG : 1;
|
|
unsigned B_BUTTON : 1;
|
|
unsigned A_BUTTON : 1;
|
|
|
|
unsigned R_CBUTTON : 1;
|
|
unsigned L_CBUTTON : 1;
|
|
unsigned D_CBUTTON : 1;
|
|
unsigned U_CBUTTON : 1;
|
|
unsigned R_TRIG : 1;
|
|
unsigned L_TRIG : 1;
|
|
unsigned Reserved1 : 1;
|
|
unsigned Reserved2 : 1;
|
|
|
|
signed Y_AXIS : 8;
|
|
|
|
signed X_AXIS : 8;
|
|
};
|
|
} BUTTONS;
|
|
|
|
typedef struct {
|
|
HWND hMainWindow;
|
|
HINSTANCE hinst;
|
|
|
|
BOOL MemoryBswaped; // If this is set to TRUE, then the memory has been pre
|
|
// bswap on a dword (32 bits) boundry, only effects header.
|
|
// eg. the first 8 bytes are stored like this:
|
|
// 4 3 2 1 8 7 6 5
|
|
BYTE * HEADER; // This is the rom header (first 40h bytes of the rom)
|
|
CONTROL *Controls; // A pointer to an array of 4 controllers .. eg:
|
|
// CONTROL Controls[4];
|
|
} CONTROL_INFO;
|
|
|
|
extern CONTROL Controls[4];
|
|
|
|
extern void (*getDllInfo)(PLUGIN_INFO *PluginInfo);
|
|
extern void (*dllConfig)(HWND hParent);
|
|
extern void (*dllTest)(HWND hParent);
|
|
extern void (*dllAbout)(HWND hParent);
|
|
|
|
extern void (*changeWindow)();
|
|
extern void (*closeDLL_gfx)();
|
|
extern BOOL (*initiateGFX)(GFX_INFO Gfx_Info);
|
|
extern void (*processDList)();
|
|
extern void (*processRDPList)();
|
|
extern void (*romClosed_gfx)();
|
|
extern void (*romOpen_gfx)();
|
|
extern void (*showCFB)();
|
|
extern void (*updateScreen)();
|
|
extern void (*viStatusChanged)();
|
|
extern void (*viWidthChanged)();
|
|
extern void (*readScreen)(void **dest, int *width, int *height);
|
|
extern void (*captureScreen)(char *dirpath);
|
|
extern void (*setRenderingCallback)(void (*callback)());
|
|
|
|
extern void (*aiDacrateChanged)(int SystemType);
|
|
extern void (*aiLenChanged)();
|
|
extern DWORD (*aiReadLength)();
|
|
//extern void (*aiUpdate)(BOOL Wait);
|
|
extern void (*closeDLL_audio)();
|
|
extern BOOL (*initiateAudio)(AUDIO_INFO Audio_Info);
|
|
extern void (*processAList)();
|
|
extern void (*romClosed_audio)();
|
|
extern void (*romOpen_audio)();
|
|
extern void (*setSpeedFactor)(int percent);
|
|
extern void (*volumeUp)();
|
|
extern void (*volumeDown)();
|
|
extern void (*volumeMute)();
|
|
extern const char * (*volumeGetString)();
|
|
|
|
extern void (*closeDLL_input)();
|
|
extern void (*controllerCommand)(int Control, BYTE * Command);
|
|
extern void (*getKeys)(int Control, BUTTONS *Keys);
|
|
extern void (*old_initiateControllers)(HWND hMainWindow, CONTROL Controls[4]);
|
|
extern void (*initiateControllers)(CONTROL_INFO ControlInfo);
|
|
extern void (*readController)(int Control, BYTE *Command);
|
|
extern void (*romClosed_input)();
|
|
extern void (*romOpen_input)();
|
|
extern void (*keyDown)(WPARAM wParam, LPARAM lParam);
|
|
extern void (*keyUp)(WPARAM wParam, LPARAM lParam);
|
|
extern void (*setConfigDir)(char *configDir);
|
|
|
|
extern void (*closeDLL_RSP)();
|
|
extern DWORD (*doRspCycles)(DWORD Cycles);
|
|
extern void (*initiateRSP)(RSP_INFO Rsp_Info, DWORD * CycleCount);
|
|
extern void (*romClosed_RSP)();
|
|
|
|
// frame buffer plugin spec extension
|
|
|
|
typedef struct
|
|
{
|
|
DWORD addr;
|
|
DWORD size;
|
|
DWORD width;
|
|
DWORD height;
|
|
} FrameBufferInfo;
|
|
|
|
extern void (*fBRead)(DWORD addr);
|
|
extern void (*fBWrite)(DWORD addr, DWORD size);
|
|
extern void (*fBGetFrameBufferInfo)(void *p);
|
|
|
|
extern HINSTANCE g_ProgramInstance;
|
|
extern HWND g_RenderWindow;
|
|
extern HWND g_StatusBar;
|
|
|
|
#endif
|
|
|