Ignore:
Timestamp:
May 19, 2001, 7:17:10 PM (24 years ago)
Author:
sandervl
Message:

added virtualpc driver emulation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/hmdevio.cpp

    r5587 r5757  
    1 /* $Id: hmdevio.cpp,v 1.9 2001-04-26 13:22:44 sandervl Exp $ */
     1/* $Id: hmdevio.cpp,v 1.10 2001-05-19 17:17:10 sandervl Exp $ */
    22
    33/*
     
    2222
    2323#include <win32type.h>
     24#include <win32api.h>
    2425#include <misc.h>
    2526#include "hmdevio.h"
     
    4041static BOOL MAPMEMIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
    4142static BOOL FXMEMMAPIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
     43static BOOL VPCIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
    4244
    4345static WIN32DRV knownDriver[] =
    4446    {{"\\\\.\\GpdDev", "",      TRUE,  666,   GpdDevIOCtl},
    4547    { "\\\\.\\MAPMEM", "PMAP$", FALSE, 0,     MAPMEMIOCtl},
    46     { "FXMEMMAP.VXD",  "PMAP$", FALSE, 0,     FXMEMMAPIOCtl}};
     48    { "FXMEMMAP.VXD",  "PMAP$", FALSE, 0,     FXMEMMAPIOCtl},
     49#if 1
     50    { "\\\\.\\VPCAppSv", "",    TRUE,  667,   VPCIOCtl}};
     51#else
     52    };
     53#endif
    4754
    4855static int nrKnownDrivers = sizeof(knownDriver)/sizeof(WIN32DRV);
     
    297304//******************************************************************************
    298305//******************************************************************************
     306static BOOL VPCIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped)
     307{
     308  switch(dwIoControlCode) {
     309  case 0x9C402880: //0x00
     310        dprintf(("VPCIOCtl func 0x9C402880: %d %x %d %x %x", nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped));
     311        if(nOutBufferSize < 4) {
     312            SetLastError(ERROR_BAD_LENGTH);
     313            return FALSE;
     314        }
     315        *(DWORD *)lpOutBuffer = 0x50001;
     316        *lpBytesReturned = 4;
     317        return TRUE;
     318  case 0x9C402894: //0x14 (get IDT table)
     319  {
     320        DWORD *lpBuffer = (DWORD *)lpOutBuffer;
     321        dprintf(("VPCIOCtl func 0x9C402894: %d %x %d %x %x", nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped));
     322        if(nOutBufferSize < 0x800) {
     323            SetLastError(ERROR_BAD_LENGTH);
     324            return FALSE;
     325        }
     326        memset(lpOutBuffer, 0, nOutBufferSize);
     327        for(int i=0;i<16;i++) {
     328            lpBuffer[i*2]   = 0x01580000;
     329            lpBuffer[i*2+1] = 0xFF008E00;
     330        }
     331        lpBuffer[0xEF*2]   = 0x01580000;
     332        lpBuffer[0xEF*2+1] = 0xFF008E00;
     333        *lpBytesReturned = 0xF0*8;
     334        return TRUE;
     335  }
     336  case 0x9C40288C: //change IDT
     337        dprintf(("VPCIOCtl func 0x9C40288C: %d %x %d %x %x", nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped));
     338        if(nInBufferSize < 0x22) {
     339            SetLastError(ERROR_BAD_LENGTH);
     340            return FALSE;
     341        }
     342        return TRUE;
     343  default:
     344        dprintf(("VPCIOCtl unknown func %X\n", dwIoControlCode));
     345        return FALSE;
     346  }
     347}
     348//******************************************************************************
     349//******************************************************************************
    299350BOOL WIN32API QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)
    300351{
Note: See TracChangeset for help on using the changeset viewer.