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

📄 emulserv.cpp

📁 我自己编译的armv4i wince60模拟器的bps源文件,已经验证可以使用,欢迎下载
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        fRet = FALSE;
        goto EXIT;
	}
	
	// Hook the interrupt and start the associated thread.
	if ( !StartIST() ) 
	{
        fRet = FALSE;
        goto EXIT;
	}

    InitializeCriticalSection(&g_csMain);        

	deviceInitialized = TRUE;
    fRet = TRUE;

EXIT:    
    if (fRet == FALSE) {
        if (v_EmulServDevice) {
            VirtualFree((LPVOID)v_EmulServDevice, 0, MEM_RELEASE);
            v_EmulServDevice = NULL;
        }
    }

    if (vpIOPRegs) {
        VirtualFree((LPVOID)vpIOPRegs, 0, MEM_RELEASE);
    }
    
	return fRet;
}

/*------------------------------------------------------------------
	DeInitializeGlobals
------------------------------------------------------------------*/

void 
DeInitializeGlobals(void)
{
	StopIST();
	DeleteCriticalSection(&g_csMain);
	deviceInitialized = FALSE;
}


//------------------------------------------------------------------
// AckInterrupt
//------------------------------------------------------------------


ULONG 
AckInterrupt()
{
    DEBUGMSG( TRUE, (TEXT("EmulatorServices:AckInterrupt() In ISR, ACKing Interrupt")) );

	return v_EmulServDevice->InterruptPending;
}

VOID
InstallInterrupt()
{
    DEBUGMSG( TRUE, (TEXT("EmulatorServices:InitInterrupt() Install Interrupt")) );

	v_EmulServDevice->InterruptMask = 0xffffffff; // Unmask all interrupts
}


VOID
UninstallInterrupt()
{
    DEBUGMSG( TRUE, (TEXT("EmulatorServices:InitInterrupt() Uninstall Interrupt")) );

	v_EmulServDevice->InterruptMask = 0;
}


/*------------------------------------------------------------------
	EMS_Init
	
	Standard stream interface Init function. Does nothing here.
------------------------------------------------------------------*/

DWORD
EMS_Init( DWORD /*registryPath*/ )
{
	return 1;
}


/*------------------------------------------------------------------
	EMS_Deinit
	
	Standard stream interface Deinit function. Does nothing here.
------------------------------------------------------------------*/

BOOL
EMS_Deinit( DWORD /*dwData*/ )
{	
	return TRUE;
}


/*------------------------------------------------------------------
	EMS_Open
	
	Standard stream interface Open function. Does nothing here.
------------------------------------------------------------------*/

extern "C"  DWORD
EMS_Open( 	DWORD /*dwData*/,
	  		DWORD /*access*/,
	  		DWORD /*shareMode*/ )  
{
	return 0;
}


/*------------------------------------------------------------------
	EMS_Close
	
	Standard stream interface Close function. Does nothing here.
------------------------------------------------------------------*/

BOOL
EMS_Close( DWORD /*dwData*/ )
{
	return TRUE;
}


/*------------------------------------------------------------------
	EMS_Write
	
	Standard stream interface Write function. Does nothing here.
------------------------------------------------------------------*/

DWORD
EMS_Write( DWORD	/*dwData*/,	
		   LPCVOID	/*writeBytes*/,	
		   DWORD	/*numBytes*/ )
{
	return 0;
}


/*------------------------------------------------------------------
	EMS_Read
	
	Standard stream interface Read function. Does nothing here.
------------------------------------------------------------------*/

DWORD
EMS_Read( DWORD		/*dwData*/,
		  LPVOID	/*buffer*/,
		  DWORD		/*numRead*/ )
{
	return 0;
}


/*------------------------------------------------------------------
	EMS_IOControl
	
	Standard stream interface IOControl function. Does nothing here.
------------------------------------------------------------------*/

extern "C"  BOOL
EMS_IOControl( DWORD	/*dwData*/,		
			   DWORD	/*code*/,		
			   PBYTE	/*inBuf*/,		
			   DWORD	/*inLength*/,	
			   DWORD	/*outLength*/,	
			   PBYTE	/*outBuf*/,	
			   PDWORD	/*actualOut*/	)
{
	return FALSE;
}


/*------------------------------------------------------------------
	EMS_PowerUp
	
	Standard stream interface PowerUp function. Does nothing here.
------------------------------------------------------------------*/

extern "C"  void
EMS_PowerUp( DWORD /*hContext*/ )
{	
	// do nothing
}


/*------------------------------------------------------------------
	EMS_PowerDown
	
	Standard stream interface PowerDown function. Does nothing here.
------------------------------------------------------------------*/
extern "C"  void
EMS_PowerDown( DWORD /*hContext*/ )
{	
	// do nothing
}


/*------------------------------------------------------------------
	EMS_Seek
	
	Standard stream interface Seek function. Does nothing here.
------------------------------------------------------------------*/

extern "C"  DWORD
EMS_Seek( DWORD /*hOpenContext*/, 
		  long /*amount*/, 
		  WORD /*type*/ )
{
	// Do nothing, return fail
	return -1;
}


//------------------------------------------------------------------------
//
//------------------------------------------------------------------------
DWORD DSK_Init(DWORD dwContext)
{
    return 1;
}


//------------------------------------------------------------------------
//
//------------------------------------------------------------------------
DWORD
DSK_Open(
    DWORD dwData,
    DWORD dwAccess,
    DWORD dwShareMode
    )
{
    return 1;
}


//------------------------------------------------------------------------
//
//------------------------------------------------------------------------
BOOL DSK_DeinitClose(DWORD dwContext)
{
    return TRUE;
}


//------------------------------------------------------------------------
//
//------------------------------------------------------------------------
DWORD DSK_Dud(DWORD dwData,DWORD dwAccess,DWORD dwShareMode)
{
    return dwData;
}


//------------------------------------------------------------------------
//
//------------------------------------------------------------------------
void DSK_Power(void)
{
}


//------------------------------------------------------------------------
//
//------------------------------------------------------------------------
BOOL
DSK_IOControl(
    DWORD Handle,
    DWORD dwIoControlCode,
    PBYTE pInBuf,
    DWORD nInBufSize,
    PBYTE pOutBuf,
    DWORD nOutBufSize,
    PDWORD pBytesReturned
    )
{
    BOOL initted = (BOOL)Handle;

    DEBUGMSG( TRUE, (TEXT("Emulator Services: +DSK_IOControl\n")) );

    if( !initted ) 
    {
        SetLastError(ERROR_INVALID_HANDLE);
        DEBUGMSG(TRUE, (TEXT("-DSK_IOControl (invalid disk) \r\n")));
        return FALSE;
    }

     //
    // Check parameters
    //
    switch (dwIoControlCode) 
    {
	    case DISK_IOCTL_GETINFO:
	        if (pInBuf == NULL) {
	            SetLastError(ERROR_INVALID_PARAMETER);
	            return FALSE;
	        }
	        break;


	    case IOCTL_DISK_DEVICE_INFO:
	        if(!pInBuf || nInBufSize != sizeof(STORAGEDEVICEINFO)) {
	            SetLastError(ERROR_INVALID_PARAMETER);   
	            return FALSE;
	        }
	        break;

	    default:
	        SetLastError(ERROR_INVALID_PARAMETER);
	        return FALSE;
    }

    //
    // Execute dwIoControlCode
    //
    switch (dwIoControlCode)
    {
	    case DISK_IOCTL_GETINFO:
	        SetLastError(GetDiskInfo((PDISK_INFO)pInBuf));
			DEBUGMSG( TRUE, (TEXT("Emulator Services: -DSK_IOControl:DISK_IOCTL_GETINFO\n")) );
	        return TRUE;

	    case IOCTL_DISK_DEVICE_INFO: // new ioctl for disk info
	        DEBUGMSG( TRUE, (TEXT("Emulator Services: -DSK_IOControl:IOCTL_DISK_DEVICE_INFO\n")) );
	        return GetDeviceInfo((PSTORAGEDEVICEINFO)pInBuf);

	    default:
	        DEBUGMSG( TRUE, (TEXT("Emulator Services: -DSK_IOControl:default\n")) );
	        SetLastError(ERROR_INVALID_PARAMETER);
	        return FALSE;
    }
}   // DSK_IOControl


//------------------------------------------------------------------------
//
//------------------------------------------------------------------------
DWORD GetDiskInfo(	PDISK_INFO pInfo )
{
    pInfo->di_flags = 0;
    return ERROR_SUCCESS;
}   // GetDiskInfo


//------------------------------------------------------------------------
//
//------------------------------------------------------------------------
BOOL GetDeviceInfo(PSTORAGEDEVICEINFO pInfo)
{
    BOOL fRet = FALSE;
    
    if( pInfo )
    {
        _tcsncpy(pInfo->szProfile, VCEFSD_PROFILE, PROFILENAMESIZE);
        
        // set our class, type, and flags
       pInfo->dwDeviceClass = STORAGE_DEVICE_CLASS_MULTIMEDIA;
       pInfo->dwDeviceType = STORAGE_DEVICE_TYPE_UNKNOWN;
       pInfo->dwDeviceFlags = STORAGE_DEVICE_FLAG_READWRITE;
       fRet = TRUE;
    }
    return fRet;
}

/*==================================================================
	Change History (most recent first):
	
	$Log: emulserv.cpp,v $
	
==================================================================*/

⌨️ 快捷键说明

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