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

📄 win32.cpp

📁 SFC游戏模拟器 snes9x 1.43 的原代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			case 50:return !Joystick [j].PovDnRight;			case 51:return !Joystick [j].PovUpLeft;			case 52:return !Joystick [j].PovUpRight;            case 41:return !Joystick [j].ZUp;            case 42:return !Joystick [j].ZDown;            case 43:return !Joystick [j].RUp;            case 44:return !Joystick [j].RDown;            case 45:return !Joystick [j].UUp;            case 46:return !Joystick [j].UDown;            case 47:return !Joystick [j].VUp;            case 48:return !Joystick [j].VDown;                        default:                if ((KeyIdent & 0xff) > 40)                    return false;                                return !Joystick [j].Button [(KeyIdent & 0xff) - 8];        }    }     return ((GetKeyState (KeyIdent) & 0x80) == 0);}uint32 S9xReadJoypad (int which1){    if (which1 > 4)        return 0;    if (which1 == 0 && !Settings.NetPlay)        S9xWinScanJoypads ();#ifdef NETPLAY_SUPPORT    if (Settings.NetPlay)	return (S9xNPGetJoypad (which1));#endif    return (joypads [which1]);}void CheckAxis (int val, int min, int max, bool &first, bool &second){    if (Normalize (val, min, max) < -S9X_JOY_NEUTRAL)    {        second = false;        first = true;    }    else        first = false;        if (Normalize (val, min, max) > S9X_JOY_NEUTRAL)    {        first = false;        second = true;    }    else        second = false;}static void S9xWinScanJoypads (){    uint8 PadState[2];    JOYINFOEX jie;        for (int C = 0; C != 16; C ++)    {        if (Joystick[C].Attached)        {            jie.dwSize = sizeof (jie);            jie.dwFlags = JOY_RETURNALL;                        if (joyGetPosEx (JOYSTICKID1+C, &jie) != JOYERR_NOERROR)            {                Joystick[C].Attached = false;                continue;            }                        CheckAxis (jie.dwXpos,                        Joystick[C].Caps.wXmin, Joystick[C].Caps.wXmax,                       Joystick[C].Left, Joystick[C].Right);            CheckAxis (jie.dwYpos,                       Joystick[C].Caps.wYmin, Joystick[C].Caps.wYmax,                       Joystick[C].Up, Joystick[C].Down);            CheckAxis (jie.dwZpos,                       Joystick[C].Caps.wZmin, Joystick[C].Caps.wZmax,                       Joystick[C].ZUp, Joystick[C].ZDown);            CheckAxis (jie.dwRpos,                       Joystick[C].Caps.wRmin, Joystick[C].Caps.wRmax,                       Joystick[C].RUp, Joystick[C].RDown);            CheckAxis (jie.dwUpos,                       Joystick[C].Caps.wUmin, Joystick[C].Caps.wUmax,                       Joystick[C].UUp, Joystick[C].UDown);            CheckAxis (jie.dwVpos,                       Joystick[C].Caps.wVmin, Joystick[C].Caps.wVmax,                       Joystick[C].VUp, Joystick[C].VDown);            switch (jie.dwPOV)            {                case JOY_POVBACKWARD:                    Joystick[C].PovDown = true;                    Joystick[C].PovUp = false;                    Joystick[C].PovLeft = false;                    Joystick[C].PovRight = false;					Joystick[C].PovDnLeft = false;					Joystick[C].PovDnRight = false;						Joystick[C].PovUpLeft = false;					Joystick[C].PovUpRight = false;					 break;				case 4500:					Joystick[C].PovDown = false;					Joystick[C].PovUp = false;					Joystick[C].PovLeft = false;					Joystick[C].PovRight = false;					Joystick[C].PovDnLeft = false;					Joystick[C].PovDnRight = false;					Joystick[C].PovUpLeft = false;					Joystick[C].PovUpRight = true;					break;				case 13500:					Joystick[C].PovDown = false;					Joystick[C].PovUp = false;					Joystick[C].PovLeft = false;					Joystick[C].PovRight = false;					Joystick[C].PovDnLeft = false;					Joystick[C].PovDnRight = true;					Joystick[C].PovUpLeft = false;					Joystick[C].PovUpRight = false;					break;				case 22500:					Joystick[C].PovDown = false;					Joystick[C].PovUp = false;					Joystick[C].PovLeft = false;					Joystick[C].PovRight = false;					Joystick[C].PovDnLeft = true;					Joystick[C].PovDnRight = false;					Joystick[C].PovUpLeft = false;					Joystick[C].PovUpRight = false;					break;				case 31500:					Joystick[C].PovDown = false;					Joystick[C].PovUp = false;					Joystick[C].PovLeft = false;					Joystick[C].PovRight = false;					Joystick[C].PovDnLeft = false;					Joystick[C].PovDnRight = false;					Joystick[C].PovUpLeft = true;					Joystick[C].PovUpRight = false;					break;                                    case JOY_POVFORWARD:                    Joystick[C].PovDown = false;                    Joystick[C].PovUp = true;                    Joystick[C].PovLeft = false;                    Joystick[C].PovRight = false;					Joystick[C].PovDnLeft = false;					Joystick[C].PovDnRight = false;						Joystick[C].PovUpLeft = false;					Joystick[C].PovUpRight = false;                    break;                                    case JOY_POVLEFT:                    Joystick[C].PovDown = false;                    Joystick[C].PovUp = false;                    Joystick[C].PovLeft = true;                    Joystick[C].PovRight = false;					Joystick[C].PovDnLeft = false;					Joystick[C].PovDnRight = false;						Joystick[C].PovUpLeft = false;					Joystick[C].PovUpRight = false;                    break;                                    case JOY_POVRIGHT:                    Joystick[C].PovDown = false;                    Joystick[C].PovUp = false;                    Joystick[C].PovLeft = false;                    Joystick[C].PovRight = true;					Joystick[C].PovDnLeft = false;					Joystick[C].PovDnRight = false;						Joystick[C].PovUpLeft = false;					Joystick[C].PovUpRight = false;                    break;                                    default:                    Joystick[C].PovDown = false;                    Joystick[C].PovUp = false;                    Joystick[C].PovLeft = false;                    Joystick[C].PovRight = false;					Joystick[C].PovDnLeft = false;					Joystick[C].PovDnRight = false;						Joystick[C].PovUpLeft = false;					Joystick[C].PovUpRight = false;                    break;            }                        for (int B = 0; B < 32; B ++)                Joystick[C].Button[B] = (jie.dwButtons & (1 << B)) != 0;        }    }    for (int J = 0; J < 5; J++)    {        if (Joypad [J].Enabled)        {            PadState[0]  = 0;            PadState[0] |= !S9xGetState (Joypad[J].R)      ?  16 : 0;            PadState[0] |= !S9xGetState (Joypad[J].L)      ?  32 : 0;            PadState[0] |= !S9xGetState (Joypad[J].X)      ?  64 : 0;            PadState[0] |= !S9xGetState (Joypad[J].A)      ? 128 : 0;                PadState[1]  = 0;            PadState[1] |= !S9xGetState (Joypad[J].Right)  ?   1 : 0;            PadState[1] |= !S9xGetState (Joypad[J].Right_Up)  ? 1 + 8 : 0;            PadState[1] |= !S9xGetState (Joypad[J].Right_Down)? 1 + 4 : 0;            PadState[1] |= !S9xGetState (Joypad[J].Left)   ?   2 : 0;            PadState[1] |= !S9xGetState (Joypad[J].Left_Up)?   2 + 8 : 0;            PadState[1] |= !S9xGetState (Joypad[J].Left_Down)?  2 + 4 : 0;            PadState[1] |= !S9xGetState (Joypad[J].Down)   ?   4 : 0;            PadState[1] |= !S9xGetState (Joypad[J].Up)     ?   8 : 0;            PadState[1] |= !S9xGetState (Joypad[J].Start)  ?  16 : 0;            PadState[1] |= !S9xGetState (Joypad[J].Select) ?  32 : 0;            PadState[1] |= !S9xGetState (Joypad[J].Y)      ?  64 : 0;            PadState[1] |= !S9xGetState (Joypad[J].B)      ? 128 : 0;			//handle turbo case!			if((GUI.TurboMask&TURBO_A_MASK)&&(PadState[0]&128))				PadState[0]^=(joypads[J]&128);			if((GUI.TurboMask&TURBO_B_MASK)&&(PadState[1]&128))				PadState[1]^=((joypads[J]&(128<<8))>>8);			if((GUI.TurboMask&TURBO_Y_MASK)&&(PadState[1]&64))				PadState[1]^=((joypads[J]&(64<<8))>>8);			if((GUI.TurboMask&TURBO_X_MASK)&&(PadState[0]&64))				PadState[0]^=(joypads[J]&64);			if((GUI.TurboMask&TURBO_L_MASK)&&(PadState[0]&32))				PadState[0]^=(joypads[J]&32);			if((GUI.TurboMask&TURBO_R_MASK)&&(PadState[0]&16))				PadState[0]^=(joypads[J]&16);			if((GUI.TurboMask&TURBO_SEL_MASK)&&(PadState[1]&32))				PadState[1]^=((joypads[J]&(32<<8))>>8);			if((GUI.TurboMask&TURBO_STA_MASK)&&(PadState[1]&16))				PadState[1]^=((joypads[J]&(16<<8))>>8);			//end turbo case...            joypads [J] = PadState [0] | (PadState [1] << 8) | 0x80000000;        }        else            joypads [J] = 0;    }}PALETTEENTRY S9xPaletteEntry[256];void S9xSetPalette( void){    LPDIRECTDRAWPALETTE lpDDTemp;    uint16 Brightness = IPPU.MaxBrightness * 140;    // Only update the palette structures if needed    if( GUI.ScreenDepth == 8)    {        if (Settings.SixteenBit)        {            for (int i = 0; i < 256; i++)            {                S9xPaletteEntry[i].peRed   = FixedColours [i].red;                S9xPaletteEntry[i].peGreen = FixedColours [i].green;                S9xPaletteEntry[i].peBlue  = FixedColours [i].blue;            }        }        else        {            for (int i = 0; i < 256; i ++)            {	                S9xPaletteEntry[i].peRed   = (((PPU.CGDATA [i] >>  0) & 0x1F) * Brightness) >> 8;                S9xPaletteEntry[i].peGreen = (((PPU.CGDATA [i] >>  5) & 0x1F) * Brightness) >> 8;                S9xPaletteEntry[i].peBlue  = (((PPU.CGDATA [i] >> 10) & 0x1F) * Brightness) >> 8;            }        }        DirectX.lpDDSPrimary2->GetPalette (&lpDDTemp);        if (lpDDTemp != DirectX.lpDDPalette)            DirectX.lpDDSPrimary2->SetPalette (DirectX.lpDDPalette);        DirectX.lpDDPalette->SetEntries (0, 0, 256, S9xPaletteEntry);    }}bool LockSurface2 (LPDIRECTDRAWSURFACE2 lpDDSurface, SSurface *lpSurface){    DDSURFACEDESC ddsd;    HRESULT hResult;    int retry;    ddsd.dwSize = sizeof (ddsd);    retry = 0;    while (true)    {        hResult = lpDDSurface->Lock( NULL, &ddsd, DDLOCK_WAIT, NULL);        if( hResult == DD_OK)        {            lpSurface->Width = ddsd.dwWidth;            lpSurface->Height = ddsd.dwHeight;            lpSurface->Pitch = ddsd.lPitch;            lpSurface->Surface = (unsigned char *)ddsd.lpSurface;            return (true);        }        if (hResult == DDERR_SURFACELOST)        {            retry++;            if (retry > 5)                return (false);            hResult = lpDDSurface->Restore();            GUI.ScreenCleared = true;            if (hResult != DD_OK)                return (false);            continue;        }        if (hResult != DDERR_WASSTILLDRAWING)            return (false);    }}BYTE *ScreenBuf1 = NULL;BYTE *ScreenBuf2 = NULL;BYTE *ScreenBuffer = NULL;BYTE *SubScreenBuffer = NULL;BYTE *ZBuffer = NULL;BYTE *SubZBuffer = NULL;static bool8 locked_surface = FALSE;static SSurface Dst;bool8 S9xInitUpdate (void){    GFX.SubScreen = SubScreenBuffer;    GFX.ZBuffer = ZBuffer;    GFX.SubZBuffer = SubZBuffer;    if (GUI.Scale <= 1 &&        (GUI.Stretch || !GUI.FullScreen) &&        !GUI.NeedDepthConvert &&        ((DirectX.lpDDSOffScreen2 &&          LockSurface2 (DirectX.lpDDSOffScreen2, &Dst))))    {        GFX.RealPitch = GFX.Pitch = GFX.Pitch2 = Dst.Pitch;        GFX.Screen = Dst.Surface;        DirectX.lpDDSOffScreen2->Unlock (Dst.Surface);        locked_surface = TRUE;    }    else    {        locked_surface = FALSE;#ifdef USE_OPENGL        // For OpenGL lock the screen buffer size width to 512 (might be        // overriden in S9xStartScreenRefresh) so the buffer can be uploaded        // into texture memory with a single OpenGL call.        if (Settings.OpenGLEnable)            GFX.RealPitch = GFX.Pitch = GFX.Pitch2 = 512 * sizeof (uint16);        else#endif        GFX.RealPitch = GFX.Pitch = GFX.Pitch2 = EXT_PITCH;        GFX.Screen = ScreenBuffer;    }    GFX.Delta = (GFX.SubScreen - GFX.Screen) >> 1;    if (Settings.SixteenBit)    {        GFX.PPL = GFX.Pitch >> 1;        GFX.PPLx2 = GFX.Pitch;        GFX.ZPitch = GFX.Pitch >> 1;    }    else    {        GFX.PPL = GFX.Pitch;        GFX.PPLx2 = GFX.Pitch * 2;        GFX.ZPitch = GFX.Pitch;    }    return (TRUE);}bool8 S9xDeinitUpdate (int Width, int Height, bool8 sixteen_bit){	#define BLACK BUILD_PIXEL(0,0,0)    SSurface Src;    LPDIRECTDRAWSURFACE2 lpDDSurface2 = NULL;    LPDIRECTDRAWSURFACE2 pDDSurface = NULL;    bool PrimarySurfaceLockFailed = false;    RECT srcRect;#ifdef USE_DIRECTX3D    HRESULT Render3DEnvironment ();    Render3DEnvironment ();    return true;#endif    Src.Width = Width;	if(Height%SNES_HEIGHT)	    Src.Height = Height;	else	{		if(Height==SNES_HEIGHT)			Src.Height=SNES_HEIGHT_EXTENDED;		else Src.Height=SNES_HEIGHT_EXTENDED<<1;	}    Src.Pitch = GFX.Pitch;    Src.Surface = GFX.Screen;	// avi writing	DoAVIVideoFrame(&Src, Width, Height, sixteen_bit);	if(Settings.SixteenBit)	{		uint32 q;		uint16* foo=(uint16*)(Src.Surface+(Height*Src.Pitch));		for(q=0; q<(((Src.Height-Height)*Src.Pitch)>>1); q++)		{			foo[q]=BLACK;		}		Height = Src.Height;	}	else	{		uint32 q;		uint8* foo=(uint8*)(Src.Surface+(Height*Src.Pitch));		for(q=0; q<(((Src.Height-Height)*Src.Pitch)); q++)		{			foo[q]=BLACK;		}		Height = Src.Height;	}	GUI.ScreenCleared = true;    SelectRenderMethod ();    if (!VOODOO_MODE && !OPENGL_MODE)    {        if (locked_surface)        {            lpDDSurface2 = DirectX.lpDDSOffScreen2;            PrimarySurfaceLockFailed = true;            srcRect.top    = 0;            srcRect.bottom = Height;            srcRect.left   = 0;            srcRect.right  = Width;        }        else        {            DDSCAPS caps;            caps.dwCaps = DDSCAPS_BACKBUFFER;                        if (DirectX.lpDDSPrimary2->GetAttachedSurface (&caps, &pDDSurface) != DD_OK ||                pDDSurface == NULL)            {

⌨️ 快捷键说明

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