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

📄 emuthread.h

📁 著名的任天堂FC游戏机模拟器VirtuaNes 085版的源码!
💻 H
字号:
//
// 僄儈儏儗乕僞僗儗僢僪僋儔僗
//
#ifndef	__CEMUTHREAD_INCLUDED__
#define	__CEMUTHREAD_INCLUDED__

#define	WIN32_LEAN_AND_MEAN
#include <windows.h>

#include <string>
#include <deque>
#include <queue>
using namespace std;

#include "App.h"
#include "MMTimer.h"
#include "Config.h"
#include "WaveRec.h"

#include "typedef.h"
#include "macro.h"

#include "nes.h"
#include "mmu.h"
#include "cpu.h"
#include "ppu.h"
#include "apu.h"
#include "pad.h"
#include "rom.h"
#include "mapper.h"

// Prototypes
// NetPlay Event
class	NETEV	{
public:
	INT	Event;
	DWORD	Param;
};
//class	NES;

class	CEmuThread
{
public:
	CEmuThread();
	~CEmuThread();

	// 僀儀儞僩
	enum EMUEVENT {
		EV_EXIT = -1,
		EV_NONE = 0,
		EV_INITIAL,
		EV_PAUSE,
		EV_RESUME,
		// 埲壓偼Event偱巊梡偡傞
		EV_MESSAGE_OUT,		// 儊僢僙乕僕偩偗弌椡偟偨偄帪偵巊梡

		EV_FULLSCREEN_GDI,	// EventParam

		EV_EMUPAUSE,
		EV_ONEFRAME,
		EV_THROTTLE,
		EV_FRAMESKIP_AUTO,
		EV_FRAMESKIP_UP,
		EV_FRAMESKIP_DOWN,

		EV_HWRESET,
		EV_SWRESET,

		EV_NETPLAY_START,

		EV_STATE_LOAD,		// EventParam2
		EV_STATE_SAVE,		// EventParam2

		// For Disk system
		EV_DISK_COMMAND,	// EventParam
		// For ExController
		EV_EXCONTROLLER,	// EventParam
		// For Sound
		EV_SOUND_MUTE,		// EventParam

		// For Snapshot
		EV_SNAPSHOT,
		// For Movie
		EV_MOVIE_PLAY,		// EventParam
		EV_MOVIE_REC,		// EventParam
		EV_MOVIE_RECAPPEND,	// EventParam
		EV_MOVIE_STOP,		// EventParam

		// For Wave recording
		EV_WAVEREC_START,	// EventParam
		EV_WAVEREC_STOP,

		// For Tape recording
		EV_TAPE_PLAY,		// EventParam
		EV_TAPE_REC,		// EventParam
		EV_TAPE_STOP,

		// For Barcode
		EV_BARCODE,		// EventParam2

		// For TurboFile
		EV_TURBOFILE,		// EventParam

		// For Debugger
		EV_DEBUG_RUN,
		EV_DEBUG_BRAKE,
		EV_DEBUG_STEP,
		EV_DEBUG_COMMAND,	// EventParam
	};

	// 摦嶌儌乕僪
	enum {
		STATUS_NONE = 0,
		STATUS_RUN,
		STATUS_PAUSE,
	};

	// 僨僶僢僈僐儅儞僪

	//
	void	SetPriority( INT nPriority );

	BOOL	Start( HWND hWnd, NES* nes );
	void	Stop();
	void	Pause();
	void	Resume();

	void	Event( EMUEVENT ev );
	void	EventParam( EMUEVENT ev, LONG Param );
	void	EventParam2( EMUEVENT ev, LONG Param, LONG Param2 );

	BOOL	IsRunning()	{ return (g_Status!=STATUS_NONE); }
	BOOL	IsPausing()	{ return (g_Status==STATUS_PAUSE); }

	BOOL	IsWaveRecord()	{ return g_WaveRec.IsWaveRecord(); }

	INT	GetDiskNo()	{ if( g_nes ) return g_nes->rom->GetDiskNo(); else return 0; }
	INT	GetExController() { if( g_nes ) return g_nes->pad->GetExController(); else return 0; }

	//
	NES*	GetNES()	{ return g_nes; }

protected:
	static	void	DiskCommand( BYTE cmd );
	static	BOOL	FrameInput();

	static	DWORD WINAPI	ThreadProc( LPVOID lpVoid );
	// 僒僂儞僪僗僩儕乕儈儞僌梡
	static	void	StreamProcess( BOOL bPause );

	// 僗儗僢僪僴儞僪儖偲ID
		HANDLE	m_hThread;
		DWORD	m_dwThreadID;

	// This億僀儞僞
	static	CEmuThread*	g_pThis;
	// 僂僀儞僪僂僴儞僪儖
	static	HWND	g_hWnd;
	// 僄儈儏儗乕僞僆僽僕僃僋僩億僀儞僞
	static	NES*	g_nes;

	// Wave儗僐乕僟
	static	CWaveRec g_WaveRec;

	// 億乕僘僇僂儞僩
		INT	m_nPauseCount;
	// 僗僥乕僞僗
	static	INT	g_Status;

	// 僗儗僢僪僀儀儞僩偲僀儀儞僩僴儞僪儖
	static	INT	g_Event;
	static	LONG	g_EventParam;
	static	LONG	g_EventParam2;
	static	HANDLE	g_hEvent;
	static	HANDLE	g_hEventAccept;

	// 僗儗僢僪僾儔僀僆儕僥傿
		INT	m_nPriority;
	static	INT	g_PriorityTable[];

	// 僄儔乕儊僢僙乕僕
	static	CHAR	g_szErrorMessage[512];

	// 僗僩儕儞僌僥乕僽儖
	static	LPCSTR	g_lpSoundMuteStringTable[];

	// NetPlay Event
	static	deque<NETEV>	NetEventQueue;
	static	string		strNetStateName;

private:
};

extern	CEmuThread	Emu;

#endif	// !__CEMUTHREAD_INCLUDED__

⌨️ 快捷键说明

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