⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netplay.h

📁 著名SFC模拟器Snes9x的源代码。
💻 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 _NETPLAY_H_#define _NETPLAY_H_/* * Client to server joypad update * * magic        1 * sequence_no  1 * opcode       1 * joypad data  4 * * Server to client joypad update * magic        1 * sequence_no  1 * opcode       1 + num joypads (top 3 bits) * joypad data  4 * n *///#define NP_DEBUG 1#define NP_VERSION 10#define NP_JOYPAD_HIST_SIZE 120#define NP_DEFAULT_PORT 6096#define NP_MAX_CLIENTS 5#define NP_SERV_MAGIC 'S'#define NP_CLNT_MAGIC 'C'#define NP_CLNT_HELLO 0#define NP_CLNT_JOYPAD 1#define NP_CLNT_RESET 2#define NP_CLNT_PAUSE 3#define NP_CLNT_LOAD_ROM 4#define NP_CLNT_ROM_IMAGE 5#define NP_CLNT_FREEZE_FILE 6#define NP_CLNT_SRAM_DATA 7#define NP_CLNT_READY 8#define NP_CLNT_LOADED_ROM 9#define NP_CLNT_RECEIVED_ROM_IMAGE 10#define NP_CLNT_WAITING_FOR_ROM_IMAGE 11#define NP_SERV_HELLO 0#define NP_SERV_JOYPAD 1#define NP_SERV_RESET 2#define NP_SERV_PAUSE 3#define NP_SERV_LOAD_ROM 4#define NP_SERV_ROM_IMAGE 5#define NP_SERV_FREEZE_FILE 6#define NP_SERV_SRAM_DATA 7#define NP_SERV_READY 8struct SNPClient{    volatile uint8 SendSequenceNum;    volatile uint8 ReceiveSequenceNum;    volatile bool8 Connected;    volatile bool8 SaidHello;    volatile bool8 Paused;    volatile bool8 Ready;    int Socket;    char *ROMName;    char *HostName;    char *Who;};enum {    NP_SERVER_SEND_ROM_IMAGE,    NP_SERVER_SYNC_ALL,    NP_SERVER_SYNC_CLIENT,    NP_SERVER_SEND_FREEZE_FILE_ALL,    NP_SERVER_SEND_ROM_LOAD_REQUEST_ALL,    NP_SERVER_RESET_ALL,    NP_SERVER_SEND_SRAM_ALL,    NP_SERVER_SEND_SRAM};#define NP_MAX_TASKS 20struct NPServerTask{    uint32 Task;    void  *Data;};struct SNPServer{    struct SNPClient Clients [NP_MAX_CLIENTS];    int    NumClients;    volatile struct NPServerTask TaskQueue [NP_MAX_TASKS];    volatile uint32 TaskHead;    volatile uint32 TaskTail;    int    Socket;    uint32 FrameTime;    uint32 FrameCount;    char   ROMName [30];    uint32 Joypads [5];    bool8  ClientPaused;    uint32 Paused;    bool8  SendROMImageOnConnect;    bool8  SyncByReset;};#define NP_MAX_ACTION_LEN 200struct SNetPlay{    volatile uint8  MySequenceNum;    volatile uint8  ServerSequenceNum;    volatile bool8  Connected;    volatile bool8  Abort;    volatile uint8  Player;    volatile bool8  ClientsReady [NP_MAX_CLIENTS];    volatile bool8  ClientsPaused [NP_MAX_CLIENTS];    volatile bool8  Paused;    volatile bool8  PendingWait4Sync;    volatile uint8  PercentageComplete;    volatile bool8  Waiting4EmulationThread;    volatile bool8  Answer;#ifdef __WIN32__    HANDLE          ReplyEvent;#endif    volatile int    Socket;    char *ServerHostName;    char *ROMName;    int Port;    volatile uint32 JoypadWriteInd;    volatile uint32 JoypadReadInd;    uint32 Joypads [NP_JOYPAD_HIST_SIZE][NP_MAX_CLIENTS];    uint32 Frame [NP_JOYPAD_HIST_SIZE];    uint32 FrameCount;    uint32 MaxFrameSkip;    uint32 MaxBehindFrameCount;    char   ActionMsg [NP_MAX_ACTION_LEN];    char   ErrorMsg [NP_MAX_ACTION_LEN];    char   WarningMsg [NP_MAX_ACTION_LEN];};extern "C" struct SNetPlay NetPlay;//// NETPLAY_CLIENT_HELLO message format:// header// frame_time (4)// ROMName (variable)#define WRITE_LONG(p, v) { \*((p) + 0) = (uint8) ((v) >> 24); \*((p) + 1) = (uint8) ((v) >> 16); \*((p) + 2) = (uint8) ((v) >> 8); \*((p) + 3) = (uint8) ((v) >> 0); \}#define READ_LONG(p) \((((uint8) *((p) + 0)) << 24) | \ (((uint8) *((p) + 1)) << 16) | \ (((uint8) *((p) + 2)) <<  8) | \ (((uint8) *((p) + 3)) <<  0))bool8 S9xNPConnectToServer (const char *server_name, int port,                            const char *rom_name);bool8 S9xNPWaitForHeartBeat ();uint32 S9xNPGetJoypad (int which1);bool8 S9xNPSendJoypadUpdate (uint32 joypad);void S9xNPDisconnect ();bool8 S9xNPInitialise ();bool8 S9xNPSendData (int fd, const uint8 *data, int len);bool8 S9xNPGetData (int fd, uint8 *data, int len);void S9xNPSyncClients ();void S9xNPStepJoypadHistory ();void S9xNPResetJoypadReadPos ();bool8 S9xNPSendReady (uint8 op = NP_CLNT_READY);bool8 S9xNPSendPause (bool8 pause);void S9xNPReset ();void S9xNPSetAction (const char *action, bool8 force = FALSE);void S9xNPSetError (const char *error);void S9xNPSetWarning (const char *warning);void S9xNPDiscardHeartbeats ();void S9xNPServerQueueSendingFreezeFile (const char *filename);void S9xNPServerQueueSyncAll ();void S9xNPServerQueueSendingROMImage ();void S9xNPServerQueueSendingLoadROMRequest (const char *filename);void S9xNPServerAddTask (uint32 task, void *data);bool8 S9xNPStartServer (int port);void S9xNPStopServer ();#ifdef __WIN32__#define S9xGetMilliTime timeGetTime#elseuint32 S9xGetMilliTime ();#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -