static void onSizing(HWND, WPARAM wParam, LPARAM lParam) { RECT* rect = (RECT *)lParam; int adjustment = wParam; int extrawidth = getScrnExtraWidth(); int extraheight = getScrnExtraHeight(); int adjwidth, adjheight; int nBmapWidth = nVidImageWidth, nBmapHeight = nVidImageHeight; // get game size if (bDrvOkay) { if ((BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) && (nVidRotationAdjust & 1)) { BurnDrvGetVisibleSize(&nBmapHeight, &nBmapWidth); } else { BurnDrvGetVisibleSize(&nBmapWidth, &nBmapHeight); } if (nBmapWidth <= 0 || nBmapHeight <= 0) { return; } } RECT rect_image = { 0, 0, rect->right-rect->left-extrawidth, rect->bottom-rect->top-extraheight }; VidScale(&rect_image, nBmapWidth, nBmapHeight); // calculate screen size to fit game size adjwidth = rect->left + rect_image.right - rect_image.left + extrawidth - rect->right; adjheight = rect->top + rect_image.bottom - rect_image.top + extraheight - rect->bottom; switch (adjustment) { case WMSZ_BOTTOM: case WMSZ_BOTTOMRIGHT: case WMSZ_RIGHT: rect->right += adjwidth; rect->bottom += adjheight; break; case WMSZ_BOTTOMLEFT: rect->left -= adjwidth; rect->bottom += adjheight; break; case WMSZ_LEFT: case WMSZ_TOPLEFT: case WMSZ_TOP: rect->left -= adjwidth; rect->top -= adjheight; break; case WMSZ_TOPRIGHT: rect->right += adjwidth; rect->top -= adjheight; break; } }
static INT32 CheckHiscoreAllowed() { INT32 Allowed = 1; if (!EnableHiscores) Allowed = 0; if (!(BurnDrvGetFlags() & BDF_HISCORE_SUPPORTED)) Allowed = 0; return Allowed; }
char* DecorateGameName(unsigned int nBurnDrv) { static char szDecoratedName[256]; unsigned int nOldBurnDrv = nBurnDrvSelect; nBurnDrvSelect = nBurnDrv; const char* s1 = ""; const char* s2 = ""; const char* s3 = ""; const char* s4 = ""; const char* s5 = ""; const char* s6 = ""; const char* s7 = ""; const char* s8 = ""; s1 = BurnDrvGetTextA(DRV_FULLNAME); if (BurnDrvGetFlags() & BDF_PROTOTYPE || BurnDrvGetFlags() & BDF_BOOTLEG || BurnDrvGetTextA(DRV_COMMENT) && strlen(BurnDrvGetTextA(DRV_COMMENT)) > 0) { s2 = " ["; if (BurnDrvGetFlags() & BDF_PROTOTYPE) { s3 = "Prototype"; if (BurnDrvGetFlags() & BDF_BOOTLEG || BurnDrvGetTextA(DRV_COMMENT) && strlen(BurnDrvGetTextA(DRV_COMMENT)) > 0) { s4 = ", "; } } if (BurnDrvGetFlags() & BDF_BOOTLEG) { s5 = "Bootleg"; if (BurnDrvGetTextA(DRV_COMMENT) && strlen(BurnDrvGetTextA(DRV_COMMENT)) > 0) { s6 = ", "; } } if (BurnDrvGetTextA(DRV_COMMENT) && strlen(BurnDrvGetTextA(DRV_COMMENT)) > 0) { s7 = BurnDrvGetTextA(DRV_COMMENT); } s8 = "]"; } sprintf(szDecoratedName, "%s%s%s%s%s%s%s%s", s1, s2, s3, s4, s5, s6, s7, s8); nBurnDrvSelect = nOldBurnDrv; return szDecoratedName; }
static int Init() { bRotateGame = (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL); bFlipGame = BurnDrvGetFlags() & BDF_ORIENTATION_FLIPPED; if (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) { BurnDrvGetVisibleSize(&clipy, &clipx); BurnDrvGetFullSize(&sizex, &sizey); } else { BurnDrvGetVisibleSize(&clipx, &clipy); BurnDrvGetFullSize(&sizex, &sizey); } VidBpp = nBurnBpp = 2; VidMemPitch = sizex * VidBpp; VidMemLen = sizey * VidMemPitch; VidMem = (unsigned char*)malloc(VidMemLen); SetBurnHighCol(16); bVidScanlines = 0; // !!! nVidFullscreen=0; vidgu_init(); return 0; }
int VideoInit() { BurnDrvGetFullSize(&VideoBufferWidth, &VideoBufferHeight); printf("w=%d h=%d\n",VideoBufferWidth, VideoBufferHeight); nBurnBpp = 2; BurnHighCol = myHighCol16; BurnRecalcPal(); nBurnPitch = VideoBufferWidth * 2; PhysicalBufferWidth = screen->w; BurnVideoBuffer = (unsigned short *)malloc(VideoBufferWidth * VideoBufferHeight * 2); BurnerVideoTrans = Blit_320x240_to_320x240; // default blit // if source buffer < screen buffer then set general blitting routine with centering if needed if(VideoBufferWidth <= screen->w && VideoBufferHeight <= screen->h) { p_offset = (screen->w - VideoBufferWidth)/2 + (screen->h - VideoBufferHeight)/2*screen->w; q_offset = VideoBufferWidth*VideoBufferHeight-1; if(BurnDrvGetFlags() & BDF_ORIENTATION_FLIPPED) BurnerVideoTrans = Blitf; else BurnerVideoTrans = Blit; } else { // if source buffer is bigger than screen buffer then find an appropriate downscaler for(int i = 0; blit_table[i].dst_w != 0; i++) { if(blit_table[i].dst_w == screen->w && blit_table[i].dst_h == screen->h && blit_table[i].src_w == VideoBufferWidth && blit_table[i].src_h == VideoBufferHeight) { if (BurnDrvGetFlags() & BDF_ORIENTATION_FLIPPED) BurnerVideoTrans = blit_table[i].blitf; else BurnerVideoTrans = blit_table[i].blit; break; } } } return 0; }
int VidSScaleImage(RECT* pRect) { int nScrnWidth, nScrnHeight; int nGameAspectX = 4, nGameAspectY = 3; int nWidth = pRect->right - pRect->left; int nHeight = pRect->bottom - pRect->top; if (bVidFullStretch) { // Arbitrary stretch return 0; } if (bDrvOkay) { if ((BurnDrvGetFlags() & (BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED))) { BurnDrvGetAspect(&nGameAspectY, &nGameAspectX); } else { BurnDrvGetAspect(&nGameAspectX, &nGameAspectY); } } nScrnWidth = nGameAspectX; nScrnHeight = nGameAspectY; int nWidthScratch = nHeight * nVidScrnAspectY * nGameAspectX * nScrnWidth / (nScrnHeight * nVidScrnAspectX * nGameAspectY); if (nWidthScratch > nWidth) { // The image is too wide if (nGamesWidth < nGamesHeight) { // Vertical games nHeight = nWidth * nVidScrnAspectY * nGameAspectY * nScrnWidth / (nScrnHeight * nVidScrnAspectX * nGameAspectX); } else { // Horizontal games nHeight = nWidth * nVidScrnAspectX * nGameAspectY * nScrnHeight / (nScrnWidth * nVidScrnAspectY * nGameAspectX); } } else { nWidth = nWidthScratch; } pRect->left = (pRect->right + pRect->left) / 2; pRect->left -= nWidth / 2; pRect->right = pRect->left + nWidth; pRect->top = (pRect->top + pRect->bottom) / 2; pRect->top -= nHeight / 2; pRect->bottom = pRect->top + nHeight; return 0; }
int SetBurnHighCol(int nDepth) { VidRecalcPal(); if (nDepth == 15) VidHighCol = HighCol15; else if (nDepth == 16) VidHighCol = HighCol16; else if (nDepth > 16) VidHighCol = HighCol24; if (bDrvOkay && !(BurnDrvGetFlags() & BDF_16BIT_ONLY) || nDepth <= 16) BurnHighCol = VidHighCol; return 0; }
int DrvInit(int nDrvNum, bool bRestore) { int nStatus; bDrvOkay = 0; DrvExit(); // Make sure exitted nBurnDrvActive = nDrvNum; // Set the driver number nMaxPlayers = BurnDrvGetMaxPlayers(); GameInpInit(); // Init game input if (ConfigGameLoad(true)) { ConfigGameLoadHardwareDefaults(); } InputMake(true); GameInpDefault(); nStatus = DoLibInit(); // Init the Burn library's driver if (nStatus) { if (nStatus & 2) { BurnDrvExit(); // Exit the driver } return 1; } BurnExtLoadRom = DrvLoadRom; bDrvOkay = 1; // Okay to use all BurnDrv functions if (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) { bVidArcaderes = bVidArcaderesVer; nVidWidth = nVidVerWidth; nVidHeight = nVidVerHeight; } else { bVidArcaderes = bVidArcaderesHor; nVidWidth = nVidHorWidth; nVidHeight = nVidHorHeight; } nBurnLayer = 0xFF; // show all layers // Reset the speed throttling code, so we don't 'jump' after the load //RunReset(); VidExit(); return 0; }
void BurnGunInit(int nNumPlayers, bool bDrawTargets) { if (nNumPlayers > MAX_GUNS) nNumPlayers = MAX_GUNS; nBurnGunNumPlayers = nNumPlayers; bBurnGunDrawTargets = bDrawTargets; if (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) { BurnDrvGetVisibleSize(&nBurnGunMaxY, &nBurnGunMaxX); } else { BurnDrvGetVisibleSize(&nBurnGunMaxX, &nBurnGunMaxY); } for (int i = 0; i < MAX_GUNS; i++) { BurnGunX[i] = ((nBurnGunMaxX / 2) - 7) << 8; BurnGunY[i] = ((nBurnGunMaxY / 2) - 8) << 8; } }
void BurnLEDInit(INT32 num, INT32 position, INT32 size, INT32 color, INT32 transparency) { Debug_BurnLedInitted = 1; if (num >= MAX_LED) num = MAX_LED - 1; led_count = num; led_color = color; led_size = size; led_position0 = position; led_alpha_level = (255 * transparency) / 100; led_alpha_level2 = 256 - led_alpha_level; screen_flipped = (BurnDrvGetFlags() & BDF_ORIENTATION_FLIPPED) ? 1 : 0; BurnLEDReset(); }
void do_keypad() { static int pausecnt = 0; unsigned int joy = sdl_input_read(); int bVert = BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL; FBA_KEYPAD[0] = 0; FBA_KEYPAD[1] = 0; FBA_KEYPAD[2] = 0; FBA_KEYPAD[3] = 0; ServiceRequest = 0; P1P2Start = 0; if (joy & BUTTON_UP) FBA_KEYPAD[0] |= bVert ? 0x0004 : 0x0001; if (joy & BUTTON_DOWN) FBA_KEYPAD[0] |= bVert ? 0x0008 : 0x0002; if (joy & BUTTON_LEFT) FBA_KEYPAD[0] |= bVert ? 0x0002 : 0x0004; if (joy & BUTTON_RIGHT) FBA_KEYPAD[0] |= bVert ? 0x0001 : 0x0008; if (joy & BUTTON_SELECT) FBA_KEYPAD[0] |= 0x0010; if (joy & BUTTON_START) FBA_KEYPAD[0] |= 0x0020; if (joy & BUTTON_A) FBA_KEYPAD[0] |= 0x0040; // A if (joy & BUTTON_B) FBA_KEYPAD[0] |= 0x0080; // B if (joy & BUTTON_X) FBA_KEYPAD[0] |= 0x0100; // C if (joy & BUTTON_Y) FBA_KEYPAD[0] |= 0x0200; // D if (joy & BUTTON_SL) FBA_KEYPAD[0] |= 0x0400; // E if (joy & BUTTON_SR) FBA_KEYPAD[0] |= 0x0800; // F if (joy & BUTTON_QT) GameLooping=false; if (pausecnt > 0) pausecnt--; if ((joy & BUTTON_PAUSE) && (pausecnt==0)) { bPauseOn=!bPauseOn; pausecnt=20; if (config_options.option_sound_enable == 2) SDL_PauseAudio(bPauseOn); } if ((joy & BUTTON_SL) && (joy & BUTTON_SR)) { if (joy & BUTTON_Y) ChangeFrameskip(); else if (joy & BUTTON_START) GameLooping = false; else if (joy & BUTTON_SELECT) ServiceRequest = 1; } else if ((joy & BUTTON_START) && (joy & BUTTON_SELECT)) P1P2Start = 1; // put enter GUI here later }
void init_gl() { const unsigned char * glVersion; int isGL12=GL_FALSE; printf("opengl config\n"); if ((BurnDrvGetFlags() & BDF_16BIT_ONLY)||(nVidImageBPP!=3)) { texture_type= GL_UNSIGNED_SHORT_5_6_5_REV; } else { texture_type=GL_UNSIGNED_BYTE; } glShadeModel (GL_FLAT); glDisable (GL_POLYGON_SMOOTH); glDisable (GL_LINE_SMOOTH); glDisable (GL_POINT_SMOOTH); glDisable(GL_BLEND); glDisable(GL_DEPTH_TEST); glDepthMask(GL_FALSE); glDisable(GL_CULL_FACE); glEnable(GL_TEXTURE_2D); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, nVidImageBPP, nTextureWidth, nTextureHeight, 0,GL_RGB, texture_type, texture); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (!nRotateGame) { glRotatef(0.0, 0.0, 0.0, 1.0); glOrtho(0, nGamesWidth, nGamesHeight, 0, -1,1); } else { glRotatef(90.0, 0.0, 0.0, 1.0); glOrtho(0, nGamesHeight, nGamesWidth, 0, -1,5); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); printf("opengl config done . . . \n"); }
static int Init() { nInitedSubsytems = SDL_WasInit(SDL_INIT_VIDEO); if (!(nInitedSubsytems & SDL_INIT_VIDEO)) { SDL_InitSubSystem(SDL_INIT_VIDEO); } nUseBlitter = 0; nGameWidth = nVidImageWidth; nGameHeight = nVidImageHeight; nRotateGame = 0; //nVidRotationAdjust = 1; // add_shin if (bDrvOkay) { // Get the game screen size BurnDrvGetVisibleSize(&nGameWidth, &nGameHeight); printf( "vid_sdlfx.Init: nGame: %ix%i", nGameWidth, nGameHeight ); if (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) { if (nVidRotationAdjust & 1) { int n = nGameWidth; nGameWidth = nGameHeight; nGameHeight = n; nRotateGame |= (nVidRotationAdjust & 2); } else { nRotateGame |= 1; } } if (BurnDrvGetFlags() & BDF_ORIENTATION_FLIPPED) { nRotateGame ^= 2; } } nSize = VidSoftFXGetZoom(nUseBlitter); bVidScanlines = 0; // !!! if( ( sdlFramebuf = SDL_SetVideoMode(nGameWidth * nSize, nGameHeight * nSize, 0, SDL_RESIZABLE | SDL_HWSURFACE ) ) == NULL ) return 1; printf("android_sdlfx.Init: SDL_SetVideoMode( %i, %i )", nGameWidth * nSize, nGameHeight * nSize ); printf("android_sdlfx.Init: sdlFramebuf PixelFormat = %s", SDL_GetPixelFormatName( SDL_MasksToPixelFormatEnum( sdlFramebuf->format->BitsPerPixel, sdlFramebuf->format->Rmask, sdlFramebuf->format->Gmask, sdlFramebuf->format->Bmask, sdlFramebuf->format->Amask) ) ); printf("android_sdlfx.Init: ( %i, %u, %u, %u, %u )", sdlFramebuf->format->BitsPerPixel, sdlFramebuf->format->Rmask, sdlFramebuf->format->Gmask, sdlFramebuf->format->Bmask, sdlFramebuf->format->Amask ); SDL_SetClipRect(sdlFramebuf, NULL); // Initialize the buffer surfaces BlitFXInit(); if (VidSoftFXInit(nUseBlitter, nRotateGame)) { if (VidSoftFXInit(0, nRotateGame)) { Exit(); return 1; } } printf( "vid_sdlfx.Init: nRotateGame=%i", nRotateGame ); return 0; }
int scrnSize() { if (!hScrnWnd || nVidFullscreen || bFakeFullscreen) { return 1; } int nBmapWidth = nVidImageWidth, nBmapHeight = nVidImageHeight; int nGameAspectX = 4, nGameAspectY = 3; // adjust the screen size for skin, added by regret if (!bDrvOkay) { if (nBmapWidth > DEFAULT_IMAGE_WIDTH) { nBmapWidth = DEFAULT_IMAGE_WIDTH; } if (nBmapHeight > DEFAULT_IMAGE_HEIGHT) { nBmapHeight = DEFAULT_IMAGE_HEIGHT; } } if (bDrvOkay) { if ((BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) && (nVidRotationAdjust & 1)) { BurnDrvGetVisibleSize(&nBmapHeight, &nBmapWidth); BurnDrvGetAspect(&nGameAspectY, &nGameAspectX); } else { BurnDrvGetVisibleSize(&nBmapWidth, &nBmapHeight); BurnDrvGetAspect(&nGameAspectX, &nGameAspectY); } if (nBmapWidth <= 0 || nBmapHeight <= 0) { return 1; } } nDragX = GetSystemMetrics(SM_CXDRAG) / 2; nDragY = GetSystemMetrics(SM_CYDRAG) / 2; // Find the size of the visible WorkArea SystemParametersInfo(SPI_GETWORKAREA, 0, &SystemWorkArea, 0); int nScrnWidth = SystemWorkArea.right - SystemWorkArea.left; int nScrnHeight = SystemWorkArea.bottom - SystemWorkArea.top; int nMaxSize = nWindowSize; if (nMaxSize <= 0) { // auto size if (nBmapWidth < nBmapHeight) { if (nScrnHeight <= 600) { nMaxSize = 1; } else if (nScrnHeight <= 960) { nMaxSize = 2; } else if (nScrnHeight <= 1280) { nMaxSize = 3; } else { nMaxSize = 4; } } else { if (nScrnWidth <= 640) { nMaxSize = 1; } else if (nScrnWidth <= 1152) { nMaxSize = 2; } else if (nScrnWidth <= 1600) { nMaxSize = 3; } else { nMaxSize = 4; } } } // Find the width and height int w = nScrnWidth; int h = nScrnHeight; // Find out how much space is taken up by the borders int ew = getScrnExtraWidth(); int eh = getScrnExtraHeight(); if (bMenuEnabled) { // Subtract the border space w -= ew; h -= eh; } if (bVidCorrectAspect || bVidFullStretch) { int ww = w; int hh = h; do { if (nBmapWidth < nBmapHeight) { if (ww > nBmapWidth * nMaxSize) { ww = nBmapWidth * nMaxSize; } if (hh > ww * vidScrnAspect * nGameAspectY * nScrnHeight / (nScrnWidth * nGameAspectX)) { hh = ww * vidScrnAspect * nGameAspectY * nScrnHeight / (nScrnWidth * nGameAspectX); } } else { if (hh > nBmapHeight * nMaxSize) { hh = nBmapHeight * nMaxSize; } if (ww > hh * nGameAspectX * nScrnWidth / (nScrnHeight * vidScrnAspect * nGameAspectY)) { ww = hh * nGameAspectX * nScrnWidth / (nScrnHeight * vidScrnAspect * nGameAspectY); } } } while ((ww > w || hh > h) && nMaxSize-- > 1); w = ww; h = hh; } else { while ((nBmapWidth * nMaxSize > w || nBmapHeight * nMaxSize > h) && nMaxSize > 1) { nMaxSize--; } if (w > nBmapWidth * nMaxSize || h > nBmapHeight * nMaxSize) { w = nBmapWidth * nMaxSize; h = nBmapHeight * nMaxSize; } } RECT rect = { 0, 0, w, h }; VidScale(&rect, nBmapWidth, nBmapHeight); w = rect.right - rect.left + ew; h = rect.bottom - rect.top + eh; int x = nWindowPosX; int y = nWindowPosY; if (x + w > SystemWorkArea.right || y + h > SystemWorkArea.bottom) { // Find the midpoint for the window x = SystemWorkArea.left + SystemWorkArea.right; x /= 2; y = SystemWorkArea.bottom + SystemWorkArea.top; y /= 2; x -= w / 2; y -= h / 2; } bMaximised = false; MoveWindow(hScrnWnd, x, y, w, h, TRUE); // SetWindowPos(hScrnWnd, NULL, x, y, w, h, SWP_NOREDRAW | SWP_NOACTIVATE | SWP_NOSENDCHANGING | SWP_NOZORDER); if (bDrvOkay && bShowOnTop) { SetWindowPos(hScrnWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW | SWP_NOMOVE); } nWindowPosX = x; nWindowPosY = y; return 0; }
int DrvInit(int nDrvNum, bool bRestore) { int nStatus; DrvExit(); // Make sure exitted MediaExit(); nBurnDrvActive = nDrvNum; // Set the driver number if ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_SNK_MVS) { BurnExtCartridgeSetupCallback = DrvCartridgeAccess; if (SelMVSDialog()) { POST_INITIALISE_MESSAGE; return 0; } } if ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_SNK_NEOCD) { if (CDEmuInit()) { FBAPopupAddText(PUF_TEXT_DEFAULT, MAKEINTRESOURCE(IDS_ERR_CDEMU_INI_FAIL)); FBAPopupDisplay(PUF_TYPE_ERROR); POST_INITIALISE_MESSAGE; return 0; } } MediaInit(); // Define nMaxPlayers early; GameInpInit() needs it (normally defined in DoLibInit()). nMaxPlayers = BurnDrvGetMaxPlayers(); GameInpInit(); // Init game input if(ConfigGameLoad(true)) { ConfigGameLoadHardwareDefaults(); } InputMake(true); GameInpDefault(); if (kNetGame) { nBurnCPUSpeedAdjust = 0x0100; } nStatus = DoLibInit(); // Init the Burn library's driver if (nStatus) { if (nStatus & 2) { BurnDrvExit(); // Exit the driver ScrnTitle(); FBAPopupAddText(PUF_TEXT_DEFAULT, MAKEINTRESOURCE(IDS_ERR_BURN_INIT), BurnDrvGetText(DRV_FULLNAME)); FBAPopupDisplay(PUF_TYPE_WARNING); } POST_INITIALISE_MESSAGE; return 1; } BurnExtLoadRom = DrvLoadRom; bDrvOkay = 1; // Okay to use all BurnDrv functions if (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) { nScreenSize = nScreenSizeVer; bVidArcaderes = bVidArcaderesVer; nVidWidth = nVidVerWidth; nVidHeight = nVidVerHeight; } else { nScreenSize = nScreenSizeHor; bVidArcaderes = bVidArcaderesHor; nVidWidth = nVidHorWidth; nVidHeight = nVidHorHeight; } bSaveRAM = false; if (kNetGame) { KailleraInitInput(); KailleraGetInput(); } else { if (bRestore) { StatedAuto(0); bSaveRAM = true; ConfigCheatLoad(); } } nBurnLayer = 0xFF; // show all layers // Reset the speed throttling code, so we don't 'jump' after the load RunReset(); VidExit(); POST_INITIALISE_MESSAGE; return 0; }
int VideoInit() { // Initialize SDL int flags = (options.vsync ? (SDL_HWSURFACE | #ifdef SDL_TRIPLEBUF SDL_TRIPLEBUF #else SDL_DOUBLEBUF #endif ) : SDL_SWSURFACE); if(!(SDL_WasInit(SDL_INIT_VIDEO) & SDL_INIT_VIDEO)) { SDL_InitSubSystem(SDL_INIT_VIDEO); } screen = SDL_SetVideoMode(320, 240, 16, flags); /*{ int i = 0; // 0 - 320x240, 1 - 400x240, 2 - 480x272 int surfacewidth, surfaceheight; #define NUMOFVIDEOMODES 3 struct { int x; int y; } vm[NUMOFVIDEOMODES] = { {320, 240}, {400, 240}, {480, 272} }; // check 3 videomodes: 480x272, 400x240, 320x240 for(i = NUMOFVIDEOMODES-1; i >= 0; i--) { if(SDL_VideoModeOK(vm[i].x, vm[i].y, 16, SDL_SWSURFACE) != 0) { surfacewidth = vm[i].x; surfaceheight = vm[i].y; break; } } screen = SDL_SetVideoMode(surfacewidth, surfaceheight, 16, SDL_SWSURFACE); }*/ if(!screen) { printf("SDL_SetVideoMode screen not initialised.\n"); } else { printf("SDL_SetVideoMode successful.\n"); } VideoBuffer = (unsigned short*)screen->pixels; SDL_ShowCursor(SDL_DISABLE); SDL_WM_SetCaption("Final Burn SDL", 0); BurnDrvGetFullSize(&VideoBufferWidth, &VideoBufferHeight); printf("w=%d h=%d\n",VideoBufferWidth, VideoBufferHeight); nBurnBpp = 2; BurnHighCol = myHighCol16; BurnRecalcPal(); nBurnPitch = VideoBufferWidth * 2; PhysicalBufferWidth = screen->w; BurnVideoBuffer = (unsigned short *)malloc(VideoBufferWidth * VideoBufferHeight * 2); memset(BurnVideoBuffer, 0, VideoBufferWidth * VideoBufferHeight * 2); BurnerVideoTrans = Blit_320x240_to_320x240; // default blit bool bVertical = options.rotate && (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL); // if source buffer < screen buffer then set general blitting routine with centering if needed if(!bVertical && VideoBufferWidth <= screen->w && VideoBufferHeight <= screen->h) { if(BurnDrvGetFlags() & BDF_ORIENTATION_FLIPPED) BurnerVideoTrans = Blitf; else BurnerVideoTrans = Blit; } else if(bVertical && VideoBufferWidth <= screen->h && VideoBufferHeight <= screen->w) { if(BurnDrvGetFlags() & BDF_ORIENTATION_FLIPPED) BurnerVideoTrans = Blitrf; else BurnerVideoTrans = Blitr; } else { // if source buffer is bigger than screen buffer then find an appropriate downscaler for(int i = 0; blit_table[i].dst_w != 0; i++) { if(blit_table[i].dst_w == screen->w && blit_table[i].dst_h == screen->h && blit_table[i].src_w == VideoBufferWidth && blit_table[i].src_h == VideoBufferHeight) { if (bVertical && (BurnDrvGetFlags() & BDF_ORIENTATION_FLIPPED)) BurnerVideoTrans = blit_table[i].blitrf; else if (BurnDrvGetFlags() & BDF_ORIENTATION_FLIPPED) BurnerVideoTrans = blit_table[i].blitf; else if (bVertical) BurnerVideoTrans = blit_table[i].blitr; else BurnerVideoTrans = blit_table[i].blit; break; } } } if (BurnerVideoTrans == Blit || BurnerVideoTrans == Blitf || BurnerVideoTrans == Blitr || BurnerVideoTrans == Blitrf) { if (bVertical) { p_offset = ((screen->h - VideoBufferWidth)/2)*screen->w; r_offset = screen->w - VideoBufferHeight; } else { p_offset = (screen->w - VideoBufferWidth)/2 + (screen->h - VideoBufferHeight)/2*screen->w; q_offset = VideoBufferWidth*VideoBufferHeight-1; } } return 0; }
int write_datfile(int nDatType, int bIncMegadrive, FILE* fDat) { int nRet=0; unsigned int nOldSelect=0; unsigned int nGameSelect=0; unsigned int nParentSelect,nBoardROMSelect; nOldSelect=nBurnDrvSelect; // preserve the currently selected driver // Go over each of the games for (nGameSelect=0;nGameSelect<nBurnDrvCount;nGameSelect++) { char sgName[16]; char spName[16]; char sbName[16]; unsigned int i=0; int nPass=0; nBurnDrvSelect=nGameSelect; // Switch to driver nGameSelect if (BurnDrvGetFlags() & BDF_BOARDROM) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_SEGA_MEGADRIVE) && (bIncMegadrive == 0)) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) != HARDWARE_SEGA_MEGADRIVE) && (bIncMegadrive == 2)) { continue; } strcpy(sgName, BurnDrvGetTextA(DRV_NAME)); strcpy(spName, ""); // make sure this string is empty before we start strcpy(sbName, ""); // make sure this string is empty before we start // Check to see if the game has a parent if (BurnDrvGetTextA(DRV_PARENT)) { nParentSelect=-1U; while (BurnDrvGetTextA(DRV_PARENT)) { strcpy(spName, BurnDrvGetTextA(DRV_PARENT)); for (i=0;i<nBurnDrvCount;i++) { nBurnDrvSelect=i; if (!strcmp(spName, BurnDrvGetTextA(DRV_NAME))) { nParentSelect=i; break; } } } nBurnDrvSelect=nGameSelect; // restore driver select } else nParentSelect=nGameSelect; // Check to see if the game has a BoardROM if (BurnDrvGetTextA(DRV_BOARDROM)) { nBoardROMSelect=-1U; strcpy(sbName, BurnDrvGetTextA(DRV_BOARDROM)); for (i=0;i<nBurnDrvCount;i++) { nBurnDrvSelect=i; if (!strcmp(sbName, BurnDrvGetTextA(DRV_NAME))) { nBoardROMSelect=i; break; } } nBurnDrvSelect=nGameSelect; // restore driver select } else nBoardROMSelect=nGameSelect; if (nDatType == 0) { // Report problems if (nParentSelect==-1U) fprintf(fDat, "# Missing parent %s. It needs to be added to " APP_TITLE "!\n\n", spName); if (nBoardROMSelect==-1U) fprintf(fDat, "# Missing boardROM %s. It needs to be added to " APP_TITLE "!\n\n", sbName); // Write the header fprintf(fDat, "game (\n"); fprintf(fDat, "\tname %s\n", sgName); if (nParentSelect!=nGameSelect && nParentSelect!=-1U) { fprintf(fDat, "\tcloneof %s\n", spName); fprintf(fDat, "\tromof %s\n", spName); } else { // Add "romof" (but not 'cloneof') line for games that have boardROMs if (nBoardROMSelect!=nGameSelect && nBoardROMSelect!=-1U) { fprintf(fDat, "\tromof %s\n", sbName); } } fprintf(fDat, "\tdescription \"%s\"\n", DecorateGameName(nBurnDrvSelect)); fprintf(fDat, "\tyear %s\n", BurnDrvGetTextA(DRV_DATE)); fprintf(fDat, "\tmanufacturer \"%s\"\n", BurnDrvGetTextA(DRV_MANUFACTURER)); } if (nDatType == 2) { // Report problems if (nParentSelect==-1U) fprintf(fDat, "# Missing parent %s. It needs to be added to " APP_TITLE "!\n\n", spName); if (nBoardROMSelect==-1U) fprintf(fDat, "# Missing boardROM %s. It needs to be added to " APP_TITLE "!\n\n", sbName); // Write the header if (nParentSelect!=nGameSelect && nParentSelect!=-1U) { fprintf(fDat, "\t<game name=\"%s\" cloneof=\"%s\" romof=\"%s\">\n", sgName, spName, sbName); } else { // Add "romof" (but not 'cloneof') line for games that have boardROMs if (nBoardROMSelect!=nGameSelect && nBoardROMSelect!=-1U) { fprintf(fDat, "\t<game name=\"%s\" romof=\"%s\">\n", sgName, sbName); } else { fprintf(fDat, "\t<game name=\"%s\">\n", sgName); } } char szGameName[255]; char szGameNameBuffer[255]; char szManufacturer[255]; char szManufacturerBuffer[255]; memset(szGameName, 0, 255); memset(szGameNameBuffer, 0, 255); memset(szManufacturer, 0, 255); memset(szManufacturerBuffer, 0, 255); strcpy(szGameName, DecorateGameName(nBurnDrvSelect)); ReplaceAmpersand(szGameNameBuffer, szGameName); strcpy(szManufacturer, BurnDrvGetTextA(DRV_MANUFACTURER)); ReplaceAmpersand(szManufacturerBuffer, szManufacturer); // fprintf(fDat, "\t\t<description>%s</description>\n", DecorateGameName(nBurnDrvSelect)); fprintf(fDat, "\t\t<description>%s</description>\n", szGameNameBuffer); fprintf(fDat, "\t\t<year>%s</year>\n", BurnDrvGetTextA(DRV_DATE)); // fprintf(fDat, "\t\t<manufacturer>%s</manufacturer>\n", BurnDrvGetTextA(DRV_MANUFACTURER)); fprintf(fDat, "\t\t<manufacturer>%s</manufacturer>\n", szManufacturerBuffer); } // Write the individual ROM info for (nPass=0; nPass<2; nPass++) { nBurnDrvSelect=nGameSelect; // Skip pass 0 if possible if (nPass==0 && (nBoardROMSelect==nGameSelect || nBoardROMSelect==-1U || nDatType == 1 || nDatType == 2)) continue; // Go over each of the files needed for this game (upto 0x0100) for (i=0, nRet=0; nRet==0 && i<0x100; i++) { int nRetTmp=0; struct BurnRomInfo ri; int nLen; unsigned int nCrc; char *szPossibleName=NULL; int j, nMerged=0; memset(&ri,0,sizeof(ri)); // Get info on this file nBurnDrvSelect=nGameSelect; nRet=BurnDrvGetRomInfo(&ri,i); nRet+=BurnDrvGetRomName(&szPossibleName,i,0); if (ri.nLen==0) continue; if (nRet==0) { struct BurnRomInfo riTmp; char *szPossibleNameTmp; nLen=ri.nLen; nCrc=ri.nCrc; // Check for files from boardROMs if (nBoardROMSelect!=nGameSelect && nBoardROMSelect!=-1U) { nBurnDrvSelect=nBoardROMSelect; nRetTmp=0; // Go over each of the files needed for this game (upto 0x0100) for (j=0; nRetTmp==0 && j<0x100; j++) { memset(&riTmp,0,sizeof(riTmp)); nRetTmp+=BurnDrvGetRomInfo(&riTmp,j); nRetTmp+=BurnDrvGetRomName(&szPossibleNameTmp,j,0); if (nRetTmp==0) { if (riTmp.nLen && riTmp.nCrc==nCrc && !strcmp(szPossibleName, szPossibleNameTmp)) { // This file is from a boardROM nMerged|=2; nRetTmp++; } } } } if (!nMerged && nParentSelect!=nGameSelect && nParentSelect!=-1U) { nBurnDrvSelect=nParentSelect; nRetTmp=0; // Go over each of the files needed for this game (upto 0x0100) for (j=0; nRetTmp==0 && j<0x100; j++) { memset(&riTmp,0,sizeof(riTmp)); nRetTmp+=BurnDrvGetRomInfo(&riTmp,j); nRetTmp+=BurnDrvGetRomName(&szPossibleNameTmp,j,0); if (nRetTmp==0) { if (riTmp.nLen && riTmp.nCrc==nCrc && !strcmp(szPossibleName, szPossibleNameTmp)) { // This file is from a parent set nMerged|=1; nRetTmp++; } } } } nBurnDrvSelect=nGameSelect; // Switch back to game } if (nDatType == 0) { // Selectable BIOS meta info if (nPass==0 && nMerged&2 && ri.nType&BRF_SELECT) fprintf(fDat, "\tbiosset ( name %d description \"%s\" %s)\n", i - 128, szPossibleName, ri.nType & BRF_OPT ? "" : "default yes "); // File info if (nPass==1 && !nMerged) { if (ri.nType & BRF_NODUMP) { fprintf(fDat, "\trom ( name %s size %d flags nodump )\n", szPossibleName, ri.nLen); } else { fprintf(fDat, "\trom ( name %s size %d crc %08x )\n", szPossibleName, ri.nLen, ri.nCrc); } } if (nPass==1 && nMerged) { // Selectable BIOS file info if (nMerged&2 && ri.nType&BRF_SELECT) fprintf(fDat, "\trom ( name %s merge %s bios %d size %d crc %08x )\n", szPossibleName, szPossibleName, i - 128, ri.nLen, ri.nCrc); // Files from parent/boardROMs else { if (ri.nType & BRF_NODUMP) { fprintf(fDat, "\trom ( name %s merge %s size %d flags nodump )\n", szPossibleName, szPossibleName, ri.nLen); } else { fprintf(fDat, "\trom ( name %s merge %s size %d crc %08x )\n", szPossibleName, szPossibleName, ri.nLen, ri.nCrc); } } } } if (nDatType == 1) { if (nPass == 0) continue; // No meta info needed if (nParentSelect!=nGameSelect && nParentSelect!=-1U) { nBurnDrvSelect=nParentSelect; // Switch to parent fprintf(fDat, "¬%s¬%s", spName, DecorateGameName(nBurnDrvSelect)); nBurnDrvSelect=nGameSelect; // Switch back to game } else fprintf(fDat, "¬%s¬%s", BurnDrvGetTextA(DRV_NAME), DecorateGameName(nBurnDrvSelect)); fprintf(fDat, "¬%s¬%s", BurnDrvGetTextA(DRV_NAME), DecorateGameName(nBurnDrvSelect)); fprintf(fDat, "¬%s¬%08x¬%d", szPossibleName, ri.nCrc, ri.nLen); if (nParentSelect!=nGameSelect && nParentSelect!=-1U) { // Files from parent fprintf(fDat, "¬%s", spName); } else { // Files from boardROM if (nBoardROMSelect!=nGameSelect && nBoardROMSelect!=-1U) fprintf(fDat, "¬%s", sbName); } if (!nMerged) fprintf(fDat, "¬¬¬\n"); else fprintf(fDat, "¬%s¬\n", szPossibleName); } if (nDatType == 2) { char szPossibleNameBuffer[255]; memset(szPossibleNameBuffer, 0, 255); ReplaceAmpersand(szPossibleNameBuffer, szPossibleName); // File info if (nPass==1 && !nMerged) { if (ri.nType & BRF_NODUMP) { fprintf(fDat, "\t\t<rom name=\"%s\" size=\"%d\" status=\"nodump\"/>\n", szPossibleNameBuffer, ri.nLen); } else { fprintf(fDat, "\t\t<rom name=\"%s\" size=\"%d\" crc=\"%08x\"/>\n", szPossibleNameBuffer, ri.nLen, ri.nCrc); } } if (nPass==1 && nMerged) { // Files from parent/boardROMs if (ri.nType & BRF_NODUMP) { fprintf(fDat, "\t\t<rom name=\"%s\" merge=\"%s\" size=\"%d\" status=\"nodump\"/>\n", szPossibleNameBuffer, szPossibleNameBuffer, ri.nLen); } else { fprintf(fDat, "\t\t<rom name=\"%s\" merge=\"%s\" size=\"%d\" crc=\"%08x\"/>\n", szPossibleNameBuffer, szPossibleNameBuffer, ri.nLen, ri.nCrc); } } } } } if (nDatType == 0) fprintf(fDat, ")\n\n"); if (nDatType == 2) fprintf(fDat, "\t</game>\n"); } if (nDatType == 1 && (bIncMegadrive != 2)) fprintf(fDat, "[RESOURCES]\n"); // Do another pass over each of the games to find boardROMs for (nBurnDrvSelect=0; nBurnDrvSelect<nBurnDrvCount; nBurnDrvSelect++) { int i, nPass; if (!(BurnDrvGetFlags() & BDF_BOARDROM)) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) != HARDWARE_SEGA_MEGADRIVE) && (bIncMegadrive == 2)) { continue; } if (nDatType == 0) { fprintf(fDat, "resource (\n"); fprintf(fDat, "\tname %s\n", BurnDrvGetTextA(DRV_NAME)); fprintf(fDat, "\tdescription \"%s\"\n", DecorateGameName(nBurnDrvSelect)); fprintf(fDat, "\tyear %s\n", BurnDrvGetTextA(DRV_DATE)); fprintf(fDat, "\tmanufacturer \"%s\"\n", BurnDrvGetTextA(DRV_COMMENT)); } if (nDatType == 2) { fprintf(fDat, "\t<game isbios=\"yes\" name=\"%s\">\n", BurnDrvGetTextA(DRV_NAME)); fprintf(fDat, "\t\t<description>%s</description>\n", DecorateGameName(nBurnDrvSelect)); fprintf(fDat, "\t\t<year>%s</year>\n", BurnDrvGetTextA(DRV_DATE)); fprintf(fDat, "\t\t<manufacturer>%s</manufacturer>\n", BurnDrvGetTextA(DRV_MANUFACTURER)); } for (nPass=0; nPass<2; nPass++) { // No meta information needed if (nPass==0 && (nDatType == 1 || nDatType == 2)) continue; // Go over each of the individual files (upto 0x0100) for (i=0; i<0x100; i++) { struct BurnRomInfo ri; char *szPossibleName=NULL; memset(&ri,0,sizeof(ri)); nRet=BurnDrvGetRomInfo(&ri,i); nRet+=BurnDrvGetRomName(&szPossibleName,i,0); if (ri.nLen==0) continue; if (nRet==0) { if (nDatType == 0) { if (nPass==0) { if (ri.nType&BRF_SELECT) fprintf(fDat, "\tbiosset ( name %d description \"%s\" %s)\n", i, szPossibleName, ri.nType & 0x80 ? "" : "default yes "); } else { if (ri.nType&BRF_SELECT) fprintf(fDat, "\trom ( name %s bios %d size %d crc %08x )\n", szPossibleName, i, ri.nLen, ri.nCrc); else fprintf(fDat, "\trom ( name %s size %d crc %08x )\n", szPossibleName, ri.nLen, ri.nCrc); } } if (nDatType == 1) { fprintf(fDat, "¬%s¬%s", BurnDrvGetTextA(DRV_NAME), DecorateGameName(nBurnDrvSelect)); fprintf(fDat, "¬%s¬%s", BurnDrvGetTextA(DRV_NAME), DecorateGameName(nBurnDrvSelect)); fprintf(fDat, "¬%s¬%08x¬%d", szPossibleName, ri.nCrc, ri.nLen); fprintf(fDat, "¬¬¬\n"); } if (nDatType == 2) { char szPossibleNameBuffer[255]; memset(szPossibleNameBuffer, 0, 255); ReplaceAmpersand(szPossibleNameBuffer, szPossibleName); fprintf(fDat, "\t\t<rom name=\"%s\" size=\"%d\" crc=\"%08x\"/>\n", szPossibleNameBuffer, ri.nLen, ri.nCrc); } } } } if (nDatType == 0) fprintf(fDat, ")\n"); if (nDatType == 2) fprintf(fDat, "\t</game>\n"); } // Restore current driver nBurnDrvSelect=nOldSelect; if (nDatType == 2) fprintf(fDat, "</datafile>"); return 0; }
INT32 write_datfile(INT32 bType, FILE* fDat) { INT32 nRet=0; UINT32 nOldSelect=0; UINT32 nGameSelect=0; UINT32 nParentSelect,nBoardROMSelect; fprintf(fDat, "<?xml version=\"1.0\"?>\n"); fprintf(fDat, "<!DOCTYPE datafile PUBLIC \"-//FB Alpha//DTD ROM Management Datafile//EN\" \"http://www.logiqx.com/Dats/datafile.dtd\">\n\n"); fprintf(fDat, "<datafile>\n"); fprintf(fDat, "\t<header>\n"); fprintf(fDat, "\t\t<name>" APP_TITLE "</name>\n"); if (bType == DAT_ARCADE_ONLY) _ftprintf(fDat, _T("\t\t<description>") _T(APP_TITLE) _T(" v%s") _T(" Arcade Games</description>\n"), szAppBurnVer); if (bType == DAT_MEGADRIVE_ONLY) _ftprintf(fDat, _T("\t\t<description>") _T(APP_TITLE) _T(" v%s") _T(" Megadrive Games</description>\n"), szAppBurnVer); if (bType == DAT_PCENGINE_ONLY) _ftprintf(fDat, _T("\t\t<description>") _T(APP_TITLE) _T(" v%s") _T(" PC-Engine Games</description>\n"), szAppBurnVer); if (bType == DAT_TG16_ONLY) _ftprintf(fDat, _T("\t\t<description>") _T(APP_TITLE) _T(" v%s") _T(" TurboGrafx 16 Games</description>\n"), szAppBurnVer); if (bType == DAT_SGX_ONLY) _ftprintf(fDat, _T("\t\t<description>") _T(APP_TITLE) _T(" v%s") _T(" SuprGrafx Games</description>\n"), szAppBurnVer); fprintf(fDat, "\t\t<category>Standard DatFile</category>\n"); _ftprintf(fDat, _T("\t\t<version>%s</version>\n"), szAppBurnVer); fprintf(fDat, "\t\t<author>" APP_TITLE "</author>\n"); fprintf(fDat, "\t\t<homepage>http://www.barryharris.me.uk/</homepage>\n"); fprintf(fDat, "\t\t<url>http://www.barryharris.me.uk/</url>\n"); fprintf(fDat, "\t\t<clrmamepro forcenodump=\"ignore\"/>\n"); fprintf(fDat, "\t</header>\n"); nOldSelect=nBurnDrvActive; // preserve the currently selected driver // Go over each of the games for (nGameSelect=0;nGameSelect<nBurnDrvCount;nGameSelect++) { char sgName[32]; char spName[32]; char sbName[32]; char ssName[32]; UINT32 i=0; INT32 nPass=0; nBurnDrvActive=nGameSelect; // Switch to driver nGameSelect if ((BurnDrvGetFlags() & BDF_BOARDROM) || !strcmp(BurnDrvGetTextA(DRV_NAME), "neogeo")) { continue; } if ((((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_SEGA_MEGADRIVE) || ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_PCENGINE_PCENGINE) || ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_PCENGINE_TG16) || ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_PCENGINE_SGX) ) && (bType == DAT_ARCADE_ONLY)) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) != HARDWARE_SEGA_MEGADRIVE) && (bType == DAT_MEGADRIVE_ONLY)) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) != HARDWARE_PCENGINE_PCENGINE) && (bType == DAT_PCENGINE_ONLY)) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) != HARDWARE_PCENGINE_TG16) && (bType == DAT_TG16_ONLY)) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) != HARDWARE_PCENGINE_SGX) && (bType == DAT_SGX_ONLY)) { continue; } strcpy(sgName, BurnDrvGetTextA(DRV_NAME)); strcpy(spName, ""); // make sure this string is empty before we start strcpy(sbName, ""); // make sure this string is empty before we start strcpy(ssName, ""); // make sure this string is empty before we start // Check to see if the game has a parent if (BurnDrvGetTextA(DRV_PARENT)) { nParentSelect=-1U; while (BurnDrvGetTextA(DRV_PARENT)) { strcpy(spName, BurnDrvGetTextA(DRV_PARENT)); for (i=0;i<nBurnDrvCount;i++) { nBurnDrvActive=i; if (!strcmp(spName, BurnDrvGetTextA(DRV_NAME))) { nParentSelect=i; break; } } } nBurnDrvActive=nGameSelect; // restore driver select } else nParentSelect=nGameSelect; // Check to see if the game has a BoardROM if (BurnDrvGetTextA(DRV_BOARDROM)) { nBoardROMSelect=-1U; strcpy(sbName, BurnDrvGetTextA(DRV_BOARDROM)); for (i=0;i<nBurnDrvCount;i++) { nBurnDrvActive=i; if (!strcmp(sbName, BurnDrvGetTextA(DRV_NAME))) { nBoardROMSelect=i; break; } } nBurnDrvActive=nGameSelect; // restore driver select } else nBoardROMSelect=nGameSelect; if (BurnDrvGetTextA(DRV_SAMPLENAME)) { strcpy(ssName, BurnDrvGetTextA(DRV_SAMPLENAME)); } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_SEGA_MEGADRIVE) || ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_PCENGINE_TG16) ) { // remove the md_ or tg_ char Temp[35]; INT32 Length; if (sgName[0]) { Length = strlen(sgName); memset(Temp, 0, 35); strcpy(Temp, sgName); memset(sgName, 0, 32); for (INT32 pos = 0; pos < Length; pos++) { sgName[pos] = Temp[pos + 3]; } } if (spName[0]) { Length = strlen(spName); memset(Temp, 0, 35); strcpy(Temp, spName); memset(spName, 0, 32); for (INT32 pos = 0; pos < Length; pos++) { spName[pos] = Temp[pos + 3]; } } } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_PCENGINE_PCENGINE) || ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_PCENGINE_SGX) ) { // remove the pce__ or sgx__ char Temp[36]; INT32 Length; if (sgName[0]) { Length = strlen(sgName); memset(Temp, 0, 36); strcpy(Temp, sgName); memset(sgName, 0, 32); for (INT32 pos = 0; pos < Length; pos++) { sgName[pos] = Temp[pos + 4]; } } if (spName[0]) { Length = strlen(spName); memset(Temp, 0, 36); strcpy(Temp, spName); memset(spName, 0, 32); for (INT32 pos = 0; pos < Length; pos++) { spName[pos] = Temp[pos + 4]; } } } // Report problems if (nParentSelect==-1U) fprintf(fDat, "# Missing parent %s. It needs to be added to " APP_TITLE "!\n\n", spName); if (nBoardROMSelect==-1U) fprintf(fDat, "# Missing boardROM %s. It needs to be added to " APP_TITLE "!\n\n", sbName); // Write the header if (nParentSelect!=nGameSelect && nParentSelect!=-1U) { if (!strcmp(ssName, "") || !strcmp(ssName, sgName)) { fprintf(fDat, "\t<game name=\"%s\" cloneof=\"%s\" romof=\"%s\">\n", sgName, spName, spName); } else { fprintf(fDat, "\t<game name=\"%s\" cloneof=\"%s\" romof=\"%s\" sampleof=\"%s\">\n", sgName, spName, spName, ssName); } } else { // Add "romof" (but not 'cloneof') line for games that have boardROMs if (nBoardROMSelect!=nGameSelect && nBoardROMSelect!=-1U) { fprintf(fDat, "\t<game name=\"%s\" romof=\"%s\">\n", sgName, sbName); } else { if (!strcmp(ssName, "") || !strcmp(ssName, sgName)) { fprintf(fDat, "\t<game name=\"%s\">\n", sgName); } else { fprintf(fDat, "\t<game name=\"%s\" sampleof=\"%s\">\n", sgName, ssName); } } } char szGameName[255]; char szGameNameBuffer[255]; char szManufacturer[255]; char szManufacturerBuffer[255]; memset(szGameName, 0, 255); memset(szGameNameBuffer, 0, 255); memset(szManufacturer, 0, 255); memset(szManufacturerBuffer, 0, 255); strcpy(szGameName, DecorateGameName(nBurnDrvActive)); ReplaceAmpersand(szGameNameBuffer, szGameName); memset(szGameName, 0, 255); strcpy(szGameName, szGameNameBuffer); memset(szGameNameBuffer, 0, 255); ReplaceLessThan(szGameNameBuffer, szGameName); memset(szGameName, 0, 255); strcpy(szGameName, szGameNameBuffer); memset(szGameNameBuffer, 0, 255); ReplaceGreaterThan(szGameNameBuffer, szGameName); strcpy(szManufacturer, BurnDrvGetTextA(DRV_MANUFACTURER)); ReplaceAmpersand(szManufacturerBuffer, szManufacturer); memset(szManufacturer, 0, 255); strcpy(szManufacturer, szManufacturerBuffer); memset(szManufacturerBuffer, 0, 255); ReplaceLessThan(szManufacturerBuffer, szManufacturer); memset(szManufacturer, 0, 255); strcpy(szManufacturer, szManufacturerBuffer); memset(szManufacturerBuffer, 0, 255); ReplaceGreaterThan(szManufacturerBuffer, szManufacturer); fprintf(fDat, "\t\t<description>%s</description>\n", szGameNameBuffer); fprintf(fDat, "\t\t<year>%s</year>\n", BurnDrvGetTextA(DRV_DATE)); fprintf(fDat, "\t\t<manufacturer>%s</manufacturer>\n", szManufacturerBuffer); // Write the individual ROM info for (nPass=0; nPass<2; nPass++) { nBurnDrvActive=nGameSelect; // Skip pass 0 if possible (pass 0 only needed for old-style clrMAME format) if (nPass==0 /*&& (nBoardROMSelect==nGameSelect || nBoardROMSelect==-1U)*/) continue; // Go over each of the files needed for this game (upto 0x0100) for (i=0, nRet=0; nRet==0 && i<0x100; i++) { INT32 nRetTmp=0; struct BurnRomInfo ri; INT32 nLen; UINT32 nCrc; char *szPossibleName=NULL; INT32 j, nMerged=0; memset(&ri,0,sizeof(ri)); // Get info on this file nBurnDrvActive=nGameSelect; nRet=BurnDrvGetRomInfo(&ri,i); nRet+=BurnDrvGetRomName(&szPossibleName,i,0); if (ri.nLen==0) continue; if (nRet==0) { struct BurnRomInfo riTmp; char *szPossibleNameTmp; nLen=ri.nLen; nCrc=ri.nCrc; // Check for files from boardROMs if (nBoardROMSelect!=nGameSelect && nBoardROMSelect!=-1U) { nBurnDrvActive=nBoardROMSelect; nRetTmp=0; // Go over each of the files needed for this game (upto 0x0100) for (j=0; nRetTmp==0 && j<0x100; j++) { memset(&riTmp,0,sizeof(riTmp)); nRetTmp+=BurnDrvGetRomInfo(&riTmp,j); nRetTmp+=BurnDrvGetRomName(&szPossibleNameTmp,j,0); if (nRetTmp==0) { if (riTmp.nLen && riTmp.nCrc==nCrc && !strcmp(szPossibleName, szPossibleNameTmp)) { // This file is from a boardROM nMerged|=2; nRetTmp++; } } } } if (!nMerged && nParentSelect!=nGameSelect && nParentSelect!=-1U) { nBurnDrvActive=nParentSelect; nRetTmp=0; // Go over each of the files needed for this game (upto 0x0100) for (j=0; nRetTmp==0 && j<0x100; j++) { memset(&riTmp,0,sizeof(riTmp)); nRetTmp+=BurnDrvGetRomInfo(&riTmp,j); nRetTmp+=BurnDrvGetRomName(&szPossibleNameTmp,j,0); if (nRetTmp==0) { if (riTmp.nLen && riTmp.nCrc==nCrc && !strcmp(szPossibleName, szPossibleNameTmp)) { // This file is from a parent set nMerged|=1; nRetTmp++; } } } } nBurnDrvActive=nGameSelect; // Switch back to game } char szPossibleNameBuffer[255]; char szPossibleNameBuffer2[255]; memset(szPossibleNameBuffer, 0, 255); memset(szPossibleNameBuffer2, 0, 255); ReplaceAmpersand(szPossibleNameBuffer, szPossibleName); strcpy(szPossibleNameBuffer2, szPossibleNameBuffer); memset(szPossibleNameBuffer, 0, 255); ReplaceLessThan(szPossibleNameBuffer, szPossibleNameBuffer2); memset(szPossibleNameBuffer2, 0, 255); strcpy(szPossibleNameBuffer2, szPossibleNameBuffer); memset(szPossibleNameBuffer, 0, 255); ReplaceGreaterThan(szPossibleNameBuffer, szPossibleNameBuffer2); // File info if (nPass==1 && !nMerged) { if (ri.nType & BRF_NODUMP) { fprintf(fDat, "\t\t<rom name=\"%s\" size=\"%d\" status=\"nodump\"/>\n", szPossibleNameBuffer, ri.nLen); } else { fprintf(fDat, "\t\t<rom name=\"%s\" size=\"%d\" crc=\"%08x\"/>\n", szPossibleNameBuffer, ri.nLen, ri.nCrc); } } if (nPass==1 && nMerged) { // Files from parent/boardROMs if (ri.nType & BRF_NODUMP) { fprintf(fDat, "\t\t<rom name=\"%s\" merge=\"%s\" size=\"%d\" status=\"nodump\"/>\n", szPossibleNameBuffer, szPossibleNameBuffer, ri.nLen); } else { fprintf(fDat, "\t\t<rom name=\"%s\" merge=\"%s\" size=\"%d\" crc=\"%08x\"/>\n", szPossibleNameBuffer, szPossibleNameBuffer, ri.nLen, ri.nCrc); } } } // samples if (strcmp(ssName, "")) { for (i=0, nRet=0; nRet==0 && i<0x100; i++) { struct BurnSampleInfo si; char *szPossibleName=NULL; memset(&si,0,sizeof(si)); // Get info on this file nBurnDrvActive=nGameSelect; nRet=BurnDrvGetSampleInfo(&si,i); nRet+=BurnDrvGetSampleName(&szPossibleName,i,0); if (si.nFlags==0) continue; if (nPass == 1) { char szPossibleNameBuffer[255]; char szPossibleNameBuffer2[255]; memset(szPossibleNameBuffer, 0, 255); memset(szPossibleNameBuffer2, 0, 255); ReplaceAmpersand(szPossibleNameBuffer, szPossibleName); strcpy(szPossibleNameBuffer2, szPossibleNameBuffer); memset(szPossibleNameBuffer, 0, 255); ReplaceLessThan(szPossibleNameBuffer, szPossibleNameBuffer2); memset(szPossibleNameBuffer2, 0, 255); strcpy(szPossibleNameBuffer2, szPossibleNameBuffer); memset(szPossibleNameBuffer, 0, 255); ReplaceGreaterThan(szPossibleNameBuffer, szPossibleNameBuffer2); fprintf(fDat, "\t\t<sample name=\"%s\" />\n", szPossibleNameBuffer); } } } } fprintf(fDat, "\t</game>\n"); } // Do another pass over each of the games to find boardROMs for (nBurnDrvActive=0; nBurnDrvActive<nBurnDrvCount; nBurnDrvActive++) { INT32 i, nPass; if (!(BurnDrvGetFlags() & BDF_BOARDROM)) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) != HARDWARE_SEGA_MEGADRIVE) && (bType == DAT_MEGADRIVE_ONLY)) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) != HARDWARE_PCENGINE_PCENGINE) && (bType == DAT_PCENGINE_ONLY)) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) != HARDWARE_PCENGINE_TG16) && (bType == DAT_TG16_ONLY)) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) != HARDWARE_PCENGINE_SGX) && (bType == DAT_SGX_ONLY)) { continue; } fprintf(fDat, "\t<game isbios=\"yes\" name=\"%s\">\n", BurnDrvGetTextA(DRV_NAME)); fprintf(fDat, "\t\t<description>%s</description>\n", DecorateGameName(nBurnDrvActive)); fprintf(fDat, "\t\t<year>%s</year>\n", BurnDrvGetTextA(DRV_DATE)); fprintf(fDat, "\t\t<manufacturer>%s</manufacturer>\n", BurnDrvGetTextA(DRV_MANUFACTURER)); for (nPass=0; nPass<2; nPass++) { // No meta information needed (pass 0 only needed for old-style clrMAME format) if (nPass==0) continue; // Go over each of the individual files (upto 0x0100) for (i=0; i<0x100; i++) { struct BurnRomInfo ri; char *szPossibleName=NULL; memset(&ri,0,sizeof(ri)); nRet=BurnDrvGetRomInfo(&ri,i); nRet+=BurnDrvGetRomName(&szPossibleName,i,0); if (ri.nLen==0) continue; if (nRet==0) { char szPossibleNameBuffer[255]; char szPossibleNameBuffer2[255]; memset(szPossibleNameBuffer, 0, 255); memset(szPossibleNameBuffer2, 0, 255); ReplaceAmpersand(szPossibleNameBuffer, szPossibleName); strcpy(szPossibleNameBuffer2, szPossibleNameBuffer); memset(szPossibleNameBuffer, 0, 255); ReplaceLessThan(szPossibleNameBuffer, szPossibleNameBuffer2); memset(szPossibleNameBuffer2, 0, 255); strcpy(szPossibleNameBuffer2, szPossibleNameBuffer); memset(szPossibleNameBuffer, 0, 255); ReplaceGreaterThan(szPossibleNameBuffer, szPossibleNameBuffer2); fprintf(fDat, "\t\t<rom name=\"%s\" size=\"%d\" crc=\"%08x\"/>\n", szPossibleNameBuffer, ri.nLen, ri.nCrc); } } } fprintf(fDat, "\t</game>\n"); } // Restore current driver nBurnDrvActive=nOldSelect; fprintf(fDat, "</datafile>"); return 0; }
void gp2x_initialize() { int scaleheight=480; int scalewidth=800; BurnDrvGetFullSize(&WINDOW_WIDTH, &WINDOW_HEIGHT); if (((config_options.option_rotate==0) && (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL)) || (config_options.option_rotate==2)) { int t; t=WINDOW_HEIGHT; WINDOW_HEIGHT=WINDOW_WIDTH; WINDOW_WIDTH=t; } printf("dw:%d dh:%d\n",WINDOW_WIDTH,WINDOW_HEIGHT); if (config_options.option_rescale==0) { scaleheight=WINDOW_HEIGHT; scalewidth=WINDOW_WIDTH; if (scaleheight>480) scaleheight=480; if (scalewidth>800) scalewidth=800; } if (config_options.option_rescale==1) { scaleheight=WINDOW_HEIGHT*2; scalewidth=WINDOW_WIDTH*2; if (scaleheight>480) scaleheight=480; if (scalewidth>800) scalewidth=800; } if (config_options.option_rescale==2) { float xw,xh; xh=(float)480/(float)WINDOW_HEIGHT; xw=(float)800/(float)WINDOW_WIDTH; if (xh>xw) { scalewidth=(int)((float)WINDOW_WIDTH*xw); scaleheight=(int)((float)WINDOW_HEIGHT*xw); } else { scalewidth=(int)((float)WINDOW_WIDTH*xh); scaleheight=(int)((float)WINDOW_HEIGHT*xh); } if (scaleheight>480) scaleheight=480; if (scalewidth>800) scalewidth=800; } if (config_options.option_rescale==3) { scaleheight=480; scalewidth=800; } char scaling[64]; sprintf(scaling,"SDL_OMAP_LAYER_SIZE=%dx%d",scalewidth,scaleheight); printf("scaling x:%d y:%d %s\n",scalewidth,scaleheight,scaling); for (int i=0;environ[i];i++) { if (strstr(environ[i],"SDL_OMAP_LAYER_SIZE=")) { strcpy(environ[i],scaling); } } printf("Setting screen to %d x %d\n",WINDOW_WIDTH,WINDOW_HEIGHT); if ((SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO | SDL_INIT_TIMER))<0) { printf("sdl failed to init\n"); } // Initialize SDL myscreen = SDL_SetVideoMode(WINDOW_WIDTH, WINDOW_HEIGHT, 16, SDL_HWSURFACE | SDL_HWPALETTE | SDL_DOUBLEBUF); if(!myscreen) { printf("SDL_SetVideoMode screen not initialised.\n"); // debug output example for serial cable } else printf("SDL_SetVideoMode successful.\n"); SDL_ShowCursor(SDL_DISABLE); // Disable mouse cursor on gp2x SDL_WM_SetCaption( WINDOW_TITLE, 0 ); // Sets the window title (not needed for gp2x) fbdev=open("/dev/fb0", O_RDONLY); joyCount=SDL_NumJoysticks(); if (joyCount>5) joyCount=5; printf("%d Joystick(s) Found\n",joyCount); //if ((joyCount==1) && (strcmp(SDL_JoystickName(0),"gpio-keys")==0)) joyCount=0; if (joyCount>0) { for (int i=0;i<joyCount;i++) { printf("%s\t",SDL_JoystickName(i)); joys[i] = SDL_JoystickOpen(i); printf("Hats %d\t",SDL_JoystickNumHats(joys[i])); printf("Buttons %d\t",SDL_JoystickNumButtons(joys[i])); printf("Axis %d\n",SDL_JoystickNumAxes(joys[i])); if (strcmp(SDL_JoystickName(i),"nub0")==0) joys[0]=SDL_JoystickOpen(i); if (strcmp(SDL_JoystickName(i),"nub1")==0) joys[1]=SDL_JoystickOpen(i); } //if (joyCount>1) joys[0]=SDL_JoystickOpen(1); //if (joyCount>2) joys[1]=SDL_JoystickOpen(2); } VideoBuffer=(unsigned short*)malloc((WINDOW_WIDTH*2) * WINDOW_HEIGHT); SDL_VideoBuffer=SDL_CreateRGBSurfaceFrom(VideoBuffer,WINDOW_WIDTH*2,WINDOW_HEIGHT,16,WINDOW_WIDTH*2,0xF800,0x7E0,0x1F,0x0); SDL_LockSurface(SDL_VideoBuffer); gp2x_video_flip(true); }
void do_keypad() { int bVert = !options.rotate && (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL); FBA_KEYPAD[0] = 0; FBA_KEYPAD[1] = 0; FBA_KEYPAD[2] = 0; FBA_KEYPAD[3] = 0; ServiceRequest = 0; P1P2Start = 0; sdl_input_read(false); for (int it = 0; it < autofire_count; it++) { if (autofire_state[it].state == 0 && (keypc & autofire_state[it].keypc)) { autofire_state[it].state = 1; } if (autofire_state[it].state != 0 && !(keypc & autofire_state[it].keypc)) { autofire_state[it].state = 0; } } sdl_input_read(true); // process redefinable keypresses if (keypad & KEYPAD_UP) FBA_KEYPAD[0] |= bVert ? KEYPAD_LEFT : KEYPAD_UP; if (keypad & KEYPAD_DOWN) FBA_KEYPAD[0] |= bVert ? KEYPAD_RIGHT : KEYPAD_DOWN; if (keypad & KEYPAD_LEFT) FBA_KEYPAD[0] |= bVert ? KEYPAD_DOWN : KEYPAD_LEFT; if (keypad & KEYPAD_RIGHT) FBA_KEYPAD[0] |= bVert ? KEYPAD_UP : KEYPAD_RIGHT; if (keypad & KEYPAD_COIN) FBA_KEYPAD[0] |= KEYPAD_COIN; if (keypad & KEYPAD_START) FBA_KEYPAD[0] |= KEYPAD_START; if (keypad & KEYPAD_FIRE1) FBA_KEYPAD[0] |= KEYPAD_FIRE1; // A if (keypad & KEYPAD_FIRE2) FBA_KEYPAD[0] |= KEYPAD_FIRE2; // B if (keypad & KEYPAD_FIRE3) FBA_KEYPAD[0] |= KEYPAD_FIRE3; // X if (keypad & KEYPAD_FIRE4) FBA_KEYPAD[0] |= KEYPAD_FIRE4; // Y if (keypad & KEYPAD_FIRE5) FBA_KEYPAD[0] |= KEYPAD_FIRE5; // L if (keypad & KEYPAD_FIRE6) FBA_KEYPAD[0] |= KEYPAD_FIRE6; // R // process non-redefinable keypresses if (keypc & BUTTON_QT) { GameLooping = false; keypc = keypad = 0; } if (keypc & BUTTON_MENU) { keypc = keypad = 0; SndPause(1); gui_Run(); SndPause(0); } if (keypc & BUTTON_PAUSE) { bPauseOn = !bPauseOn; SndPause(bPauseOn); keypc &= ~BUTTON_PAUSE; } if(!bPauseOn) { // savestate fails inside pause if (keypc & BUTTON_QSAVE) { StatedSave(nSavestateSlot); keypc &= ~BUTTON_QSAVE; } if (keypc & BUTTON_QLOAD) { StatedLoad(nSavestateSlot); keypc &= ~BUTTON_QLOAD; bPauseOn = 0; } } if ((keypc & BUTTON_SL) && (keypc & BUTTON_SR)) { if (keypc & BUTTON_Y) { ChangeFrameskip(); keypc &= ~BUTTON_Y; } else if (keypc & BUTTON_B && !bPauseOn) { StatedSave(nSavestateSlot); keypc &= ~BUTTON_B; } else if (keypc & BUTTON_A && !bPauseOn) { StatedLoad(nSavestateSlot); keypc &= ~BUTTON_A; bPauseOn = 0; } else if (keypc & BUTTON_START) { keypc = keypad = 0; SndPause(1); gui_Run(); SndPause(0); } else if (keypc & BUTTON_SELECT) ServiceRequest = 1; } else if ((keypc & BUTTON_START) && (keypc & BUTTON_SELECT)) P1P2Start = 1; }
static INT_PTR CALLBACK ResProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM) // LPARAM lParam { static bool bOK; switch (Msg) { case WM_INITDIALOG: { DEVMODE devMode; devMode.dmSize = sizeof(DEVMODE); devMode.dmDriverExtra = 0; // Run through all possible screenmodes and fill the combobox for (int i = 0; EnumDisplaySettings(NULL, i, &devMode); i++) { // We're only interested in 16, 24, or 32 bit modes. if (devMode.dmBitsPerPel & 0x30) { long nItem = 0, nItemValue; long nNewRes = (devMode.dmPelsWidth << 16) | devMode.dmPelsHeight; // See if the resolution is already in the combobox do { nItemValue = SendDlgItemMessage(hDlg, IDC_CHOOSE_LIST, CB_GETITEMDATA, nItem, 0); nItem++; } while ((nItemValue != CB_ERR) && (nItemValue != nNewRes)); // If not, add it if (nItemValue == CB_ERR) { TCHAR szTemp[32]; _stprintf(szTemp, _T(" %li x %li"), devMode.dmPelsWidth, devMode.dmPelsHeight); nItem = SendDlgItemMessage(hDlg, IDC_CHOOSE_LIST, CB_ADDSTRING, 0, (LPARAM)&szTemp); SendDlgItemMessage(hDlg, IDC_CHOOSE_LIST, CB_SETITEMDATA, nItem, nNewRes); } } } SendDlgItemMessage(hDlg, IDC_CHOOSE_LIST, CB_SETCURSEL, 0, 0); bOK = 0; WndInMid(hDlg, hScrnWnd); return TRUE; } case WM_COMMAND: if (LOWORD(wParam) == IDOK) { bOK = 1; SendMessage(hDlg, WM_CLOSE, 0, 0); } if (LOWORD(wParam) == IDCANCEL) { SendMessage(hDlg, WM_CLOSE, 0, 0); } break; case WM_CLOSE: { if (bOK) { long nItem = SendDlgItemMessage(hDlg, IDC_CHOOSE_LIST, CB_GETCURSEL, 0, 0); long nItemValue = SendDlgItemMessage(hDlg, IDC_CHOOSE_LIST, CB_GETITEMDATA, nItem, 0); if(nOrientation == HORIZONTAL_ORIENTED_RES) { nVidHorWidth = nItemValue >> 16; nVidHorHeight = nItemValue & 0xFFFF; } if(nOrientation == VERTICAL_ORIENTED_RES) { nVidVerWidth = nItemValue >> 16; nVidVerHeight = nItemValue & 0xFFFF; } if(bDrvOkay) { if (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) { nVidWidth = nVidVerWidth; nVidHeight = nVidVerHeight; } else { nVidWidth = nVidHorWidth; nVidHeight = nVidHorHeight; } } } EndDialog(hDlg, 0); }
static int Init() { nInitedSubsytems = SDL_WasInit(SDL_INIT_VIDEO); if (!(nInitedSubsytems & SDL_INIT_VIDEO)) { SDL_InitSubSystem(SDL_INIT_VIDEO); } nGamesWidth = nVidImageWidth; nGamesHeight = nVidImageHeight; nRotateGame = 0; if (bDrvOkay) { // Get the game screen size BurnDrvGetVisibleSize(&nGamesWidth, &nGamesHeight); if (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) { printf("Vertical\n"); nRotateGame = 1; } if (BurnDrvGetFlags() & BDF_ORIENTATION_FLIPPED) { printf("Flipped\n"); bFlipped = true; } } if (!nRotateGame) { nTextureWidth = GetTextureSize(nGamesWidth); nTextureHeight = GetTextureSize(nGamesHeight); } else { nTextureWidth = GetTextureSize(nGamesHeight); nTextureHeight = GetTextureSize(nGamesWidth); } nSize = 2; bVidScanlines = 0; RECT test_rect; test_rect.left = 0; test_rect.right = nGamesWidth; test_rect.top = 0; test_rect.bottom = nGamesHeight; printf("correctx before %d, %d\n", test_rect.right, test_rect.bottom); VidSScaleImage(&test_rect); printf("correctx after %d, %d\n", test_rect.right, test_rect.bottom); screen = SDL_SetVideoMode(test_rect.right * nSize, test_rect.bottom * nSize, 32, SDL_OPENGL); SDL_WM_SetCaption("FB Alpha", NULL); // Initialize the buffer surfaces BlitFXInit(); // Init opengl init_gl(); return 0; }
int write_datfile(int bIncMegadrive, FILE* fDat) { int nRet=0; unsigned int nOldSelect=0; unsigned int nGameSelect=0; unsigned int nParentSelect,nBoardROMSelect; nOldSelect=nBurnDrvSelect; // preserve the currently selected driver // Go over each of the games for (nGameSelect=0;nGameSelect<nBurnDrvCount;nGameSelect++) { char sgName[32]; char spName[32]; char sbName[32]; char ssName[32]; unsigned int i=0; int nPass=0; nBurnDrvSelect=nGameSelect; // Switch to driver nGameSelect if (BurnDrvGetFlags() & BDF_BOARDROM) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_SEGA_MEGADRIVE) && (bIncMegadrive == 0)) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) != HARDWARE_SEGA_MEGADRIVE) && (bIncMegadrive == 2)) { continue; } #if defined (ROM_VERIFY) if ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_CAPCOM_CPS3) { continue; } #endif strcpy(sgName, BurnDrvGetTextA(DRV_NAME)); strcpy(spName, ""); // make sure this string is empty before we start strcpy(sbName, ""); // make sure this string is empty before we start strcpy(ssName, ""); // make sure this string is empty before we start // Check to see if the game has a parent if (BurnDrvGetTextA(DRV_PARENT)) { nParentSelect=-1U; while (BurnDrvGetTextA(DRV_PARENT)) { strcpy(spName, BurnDrvGetTextA(DRV_PARENT)); for (i=0;i<nBurnDrvCount;i++) { nBurnDrvSelect=i; if (!strcmp(spName, BurnDrvGetTextA(DRV_NAME))) { nParentSelect=i; break; } } } nBurnDrvSelect=nGameSelect; // restore driver select } else nParentSelect=nGameSelect; // Check to see if the game has a BoardROM if (BurnDrvGetTextA(DRV_BOARDROM)) { nBoardROMSelect=-1U; strcpy(sbName, BurnDrvGetTextA(DRV_BOARDROM)); for (i=0;i<nBurnDrvCount;i++) { nBurnDrvSelect=i; if (!strcmp(sbName, BurnDrvGetTextA(DRV_NAME))) { nBoardROMSelect=i; break; } } nBurnDrvSelect=nGameSelect; // restore driver select } else nBoardROMSelect=nGameSelect; if (BurnDrvGetTextA(DRV_SAMPLENAME)) { strcpy(ssName, BurnDrvGetTextA(DRV_SAMPLENAME)); } if ((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) == HARDWARE_SEGA_MEGADRIVE) { // remove the md_ char Temp[35]; int Length; if (sgName[0]) { Length = strlen(sgName); memset(Temp, 0, 35); strcpy(Temp, sgName); memset(sgName, 0, 32); for (int pos = 0; pos < Length; pos++) { sgName[pos] = Temp[pos + 3]; } } if (spName[0]) { Length = strlen(spName); memset(Temp, 0, 35); strcpy(Temp, spName); memset(spName, 0, 32); for (int pos = 0; pos < Length; pos++) { spName[pos] = Temp[pos + 3]; } } } // Report problems if (nParentSelect==-1U) fprintf(fDat, "# Missing parent %s. It needs to be added to " APP_TITLE "!\n\n", spName); if (nBoardROMSelect==-1U) fprintf(fDat, "# Missing boardROM %s. It needs to be added to " APP_TITLE "!\n\n", sbName); // Write the header if (nParentSelect!=nGameSelect && nParentSelect!=-1U) { if (!strcmp(ssName, "") || !strcmp(ssName, sgName)) { fprintf(fDat, "\t<game name=\"%s\" cloneof=\"%s\" romof=\"%s\">\n", sgName, spName, spName); } else { fprintf(fDat, "\t<game name=\"%s\" cloneof=\"%s\" romof=\"%s\" sampleof=\"%s\">\n", sgName, spName, spName, ssName); } } else { // Add "romof" (but not 'cloneof') line for games that have boardROMs if (nBoardROMSelect!=nGameSelect && nBoardROMSelect!=-1U) { fprintf(fDat, "\t<game name=\"%s\" romof=\"%s\">\n", sgName, sbName); } else { if (!strcmp(ssName, "") || !strcmp(ssName, sgName)) { fprintf(fDat, "\t<game name=\"%s\">\n", sgName); } else { fprintf(fDat, "\t<game name=\"%s\" sampleof=\"%s\">\n", sgName, ssName); } } } char szGameName[255]; char szGameNameBuffer[255]; char szManufacturer[255]; char szManufacturerBuffer[255]; memset(szGameName, 0, 255); memset(szGameNameBuffer, 0, 255); memset(szManufacturer, 0, 255); memset(szManufacturerBuffer, 0, 255); strcpy(szGameName, DecorateGameName(nBurnDrvSelect)); ReplaceAmpersand(szGameNameBuffer, szGameName); strcpy(szManufacturer, BurnDrvGetTextA(DRV_MANUFACTURER)); ReplaceAmpersand(szManufacturerBuffer, szManufacturer); fprintf(fDat, "\t\t<description>%s</description>\n", szGameNameBuffer); fprintf(fDat, "\t\t<year>%s</year>\n", BurnDrvGetTextA(DRV_DATE)); fprintf(fDat, "\t\t<manufacturer>%s</manufacturer>\n", szManufacturerBuffer); // Write the individual ROM info for (nPass=0; nPass<2; nPass++) { nBurnDrvSelect=nGameSelect; // Skip pass 0 if possible (pass 0 only needed for old-style clrMAME format) if (nPass==0 /*&& (nBoardROMSelect==nGameSelect || nBoardROMSelect==-1U)*/) continue; // Go over each of the files needed for this game (upto 0x0100) for (i=0, nRet=0; nRet==0 && i<0x100; i++) { int nRetTmp=0; struct BurnRomInfo ri; int nLen; unsigned int nCrc; char *szPossibleName=NULL; int j, nMerged=0; memset(&ri,0,sizeof(ri)); // Get info on this file nBurnDrvSelect=nGameSelect; nRet=BurnDrvGetRomInfo(&ri,i); nRet+=BurnDrvGetRomName(&szPossibleName,i,0); if (ri.nLen==0) continue; if (nRet==0) { struct BurnRomInfo riTmp; char *szPossibleNameTmp; nLen=ri.nLen; nCrc=ri.nCrc; // Check for files from boardROMs if (nBoardROMSelect!=nGameSelect && nBoardROMSelect!=-1U) { nBurnDrvSelect=nBoardROMSelect; nRetTmp=0; // Go over each of the files needed for this game (upto 0x0100) for (j=0; nRetTmp==0 && j<0x100; j++) { memset(&riTmp,0,sizeof(riTmp)); nRetTmp+=BurnDrvGetRomInfo(&riTmp,j); nRetTmp+=BurnDrvGetRomName(&szPossibleNameTmp,j,0); if (nRetTmp==0) { if (riTmp.nLen && riTmp.nCrc==nCrc && !strcmp(szPossibleName, szPossibleNameTmp)) { // This file is from a boardROM nMerged|=2; nRetTmp++; } } } } if (!nMerged && nParentSelect!=nGameSelect && nParentSelect!=-1U) { nBurnDrvSelect=nParentSelect; nRetTmp=0; // Go over each of the files needed for this game (upto 0x0100) for (j=0; nRetTmp==0 && j<0x100; j++) { memset(&riTmp,0,sizeof(riTmp)); nRetTmp+=BurnDrvGetRomInfo(&riTmp,j); nRetTmp+=BurnDrvGetRomName(&szPossibleNameTmp,j,0); if (nRetTmp==0) { if (riTmp.nLen && riTmp.nCrc==nCrc && !strcmp(szPossibleName, szPossibleNameTmp)) { // This file is from a parent set nMerged|=1; nRetTmp++; } } } } nBurnDrvSelect=nGameSelect; // Switch back to game } char szPossibleNameBuffer[255]; memset(szPossibleNameBuffer, 0, 255); ReplaceAmpersand(szPossibleNameBuffer, szPossibleName); // File info if (nPass==1 && !nMerged) { if (ri.nType & BRF_NODUMP) { fprintf(fDat, "\t\t<rom name=\"%s\" size=\"%d\" status=\"nodump\"/>\n", szPossibleNameBuffer, ri.nLen); } else { fprintf(fDat, "\t\t<rom name=\"%s\" size=\"%d\" crc=\"%08x\"/>\n", szPossibleNameBuffer, ri.nLen, ri.nCrc); } } if (nPass==1 && nMerged) { // Files from parent/boardROMs if (ri.nType & BRF_NODUMP) { fprintf(fDat, "\t\t<rom name=\"%s\" merge=\"%s\" size=\"%d\" status=\"nodump\"/>\n", szPossibleNameBuffer, szPossibleNameBuffer, ri.nLen); } else { fprintf(fDat, "\t\t<rom name=\"%s\" merge=\"%s\" size=\"%d\" crc=\"%08x\"/>\n", szPossibleNameBuffer, szPossibleNameBuffer, ri.nLen, ri.nCrc); } } } // samples if (strcmp(ssName, "")) { for (i=0, nRet=0; nRet==0 && i<0x100; i++) { struct BurnSampleInfo si; char *szPossibleName=NULL; memset(&si,0,sizeof(si)); // Get info on this file nBurnDrvSelect=nGameSelect; nRet=BurnDrvGetSampleInfo(&si,i); nRet+=BurnDrvGetSampleName(&szPossibleName,i,0); if (si.nFlags==0) continue; if (nPass == 1) { char szPossibleNameBuffer[255]; memset(szPossibleNameBuffer, 0, 255); ReplaceAmpersand(szPossibleNameBuffer, szPossibleName); fprintf(fDat, "\t\t<sample name=\"%s\" />\n", szPossibleNameBuffer); } } } } fprintf(fDat, "\t</game>\n"); } // Do another pass over each of the games to find boardROMs for (nBurnDrvSelect=0; nBurnDrvSelect<nBurnDrvCount; nBurnDrvSelect++) { int i, nPass; if (!(BurnDrvGetFlags() & BDF_BOARDROM)) { continue; } if (((BurnDrvGetHardwareCode() & HARDWARE_PUBLIC_MASK) != HARDWARE_SEGA_MEGADRIVE) && (bIncMegadrive == 2)) { continue; } fprintf(fDat, "\t<game isbios=\"yes\" name=\"%s\">\n", BurnDrvGetTextA(DRV_NAME)); fprintf(fDat, "\t\t<description>%s</description>\n", DecorateGameName(nBurnDrvSelect)); fprintf(fDat, "\t\t<year>%s</year>\n", BurnDrvGetTextA(DRV_DATE)); fprintf(fDat, "\t\t<manufacturer>%s</manufacturer>\n", BurnDrvGetTextA(DRV_MANUFACTURER)); for (nPass=0; nPass<2; nPass++) { // No meta information needed (pass 0 only needed for old-style clrMAME format) if (nPass==0) continue; // Go over each of the individual files (upto 0x0100) for (i=0; i<0x100; i++) { struct BurnRomInfo ri; char *szPossibleName=NULL; memset(&ri,0,sizeof(ri)); nRet=BurnDrvGetRomInfo(&ri,i); nRet+=BurnDrvGetRomName(&szPossibleName,i,0); if (ri.nLen==0) continue; if (nRet==0) { char szPossibleNameBuffer[255]; memset(szPossibleNameBuffer, 0, 255); ReplaceAmpersand(szPossibleNameBuffer, szPossibleName); fprintf(fDat, "\t\t<rom name=\"%s\" size=\"%d\" crc=\"%08x\"/>\n", szPossibleNameBuffer, ri.nLen, ri.nCrc); } } } fprintf(fDat, "\t</game>\n"); } // Restore current driver nBurnDrvSelect=nOldSelect; fprintf(fDat, "</datafile>"); return 0; }
static int Init() { nInitedSubsytems = SDL_WasInit(SDL_INIT_VIDEO); if (!(nInitedSubsytems & SDL_INIT_VIDEO)) { SDL_InitSubSystem(SDL_INIT_VIDEO); } nUseBlitter = nVidBlitterOpt[nVidSelect] & 0xFF; nGameWidth = nVidImageWidth; nGameHeight = nVidImageHeight; nRotateGame = 0; if (bDrvOkay) { // Get the game screen size BurnDrvGetVisibleSize(&nGameWidth, &nGameHeight); if (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) { if (nVidRotationAdjust & 1) { int n = nGameWidth; nGameWidth = nGameHeight; nGameHeight = n; nRotateGame |= (nVidRotationAdjust & 2); } else { nRotateGame |= 1; } } if (BurnDrvGetFlags() & BDF_ORIENTATION_FLIPPED) { nRotateGame ^= 2; } } nSize = VidSoftFXGetZoom(nUseBlitter); bVidScanlines = 0; // !!! if (nVidFullscreen) { nVidScrnWidth = nVidWidth; nVidScrnHeight = nVidHeight; if ((sdlsFramebuf = SDL_SetVideoMode(nVidWidth, nVidHeight, nVidDepth, SDL_HWSURFACE | SDL_ANYFORMAT | SDL_DOUBLEBUF | SDL_FULLSCREEN)) == NULL) { dprintf(_T("*** Couldn't enter fullscreen mode.\n")); return 1; } } else { if ((sdlsFramebuf = SDL_SetVideoMode(nGameWidth * nSize, nGameHeight * nSize, 0, SDL_RESIZABLE | SDL_HWSURFACE)) == NULL) { return 1; } } SDL_SetClipRect(sdlsFramebuf, NULL); // Initialize the buffer surfaces BlitFXInit(); if (VidSoftFXInit(nUseBlitter, nRotateGame)) { if (VidSoftFXInit(0, nRotateGame)) { Exit(); return 1; } } return 0; }
int ProcessCmdLine() { unsigned int i; int nOptX = 0, nOptY = 0, nOptD = 0; int nOpt1Size; TCHAR szOpt2[3] = _T(""); TCHAR szName[MAX_PATH]; if (szCmdLine[0] == _T('\"')) { int nLen = _tcslen(szCmdLine); nOpt1Size = 1; while (szCmdLine[nOpt1Size] != _T('\"') && nOpt1Size < nLen) { nOpt1Size++; } if (nOpt1Size == nLen) { szName[0] = 0; } else { nOpt1Size++; _tcsncpy(szName, szCmdLine + 1, nOpt1Size - 2); szName[nOpt1Size - 2] = 0; } } else { int nLen = _tcslen(szCmdLine); nOpt1Size = 0; while (szCmdLine[nOpt1Size] != _T(' ') && nOpt1Size < nLen) { nOpt1Size++; } _tcsncpy(szName, szCmdLine, nOpt1Size); szName[nOpt1Size] = 0; } if (_tcslen(szName)) { if (_tcscmp(szName, _T("-listinfo")) == 0) { write_datfile(0, stdout); return 1; } if (_tcscmp(szName, _T("-listinfowithmd")) == 0) { write_datfile(1, stdout); return 1; } if (_tcscmp(szName, _T("-listinfomdonly")) == 0) { write_datfile(2, stdout); return 1; } if (_tcscmp(szName, _T("-listextrainfo")) == 0) { int nWidth; int nHeight; int nAspectX; int nAspectY; for (i = 0; i < nBurnDrvCount; i++) { nBurnDrvActive = i; BurnDrvGetVisibleSize(&nWidth, &nHeight); BurnDrvGetAspect(&nAspectX, &nAspectY); printf("%s\t%ix%i\t%i:%i\t0x%08X\t\"%s\"\t%i\t%i\t%x\t%x\t\"%s\"\n", BurnDrvGetTextA(DRV_NAME), nWidth, nHeight, nAspectX, nAspectY, BurnDrvGetHardwareCode(), BurnDrvGetTextA(DRV_SYSTEM), BurnDrvIsWorking(), BurnDrvGetMaxPlayers(), BurnDrvGetGenreFlags(), BurnDrvGetFamilyFlags(), BurnDrvGetTextA(DRV_COMMENT)); } return 1; } } _stscanf(&szCmdLine[nOpt1Size], _T("%2s %i x %i x %i"), szOpt2, &nOptX, &nOptY, &nOptD); if (_tcslen(szName)) { bool bFullscreen = 1; bCmdOptUsed = 1; if (_tcscmp(szOpt2, _T("-r")) == 0) { if (nOptX && nOptY) { nVidWidth = nOptX; nVidHeight = nOptY; } if (nOptD) { nVidDepth = nOptD; } } else { if (_tcscmp(szOpt2, _T("-a")) == 0) { bVidArcaderes = 1; } else { if (_tcscmp(szOpt2, _T("-w")) == 0) { bCmdOptUsed = 0; bFullscreen = 0; } } } if (bFullscreen) { nVidFullscreen = 1; } if (_tcscmp(&szName[_tcslen(szName) - 3], _T(".fs")) == 0) { if (BurnStateLoad(szName, 1, &DrvInitCallback)) { return 1; } else { // bRunPause = 1; } } else { if (_tcscmp(&szName[_tcslen(szName) - 3], _T(".fr")) == 0) { if (StartReplay(szName)) { return 1; } } else { for (i = 0; i < nBurnDrvCount; i++) { nBurnDrvActive = i; if ((_tcscmp(BurnDrvGetText(DRV_NAME), szName) == 0) && (!(BurnDrvGetFlags() & BDF_BOARDROM))){ MediaInit(); DrvInit(i, true); break; } } if (i == nBurnDrvCount) { FBAPopupAddText(PUF_TEXT_DEFAULT, MAKEINTRESOURCE(IDS_ERR_UI_NOSUPPORT), szName, _T(APP_TITLE)); FBAPopupDisplay(PUF_TYPE_ERROR); return 1; } } } } POST_INITIALISE_MESSAGE; if (!nVidFullscreen) { MenuEnableItems(); } return 0; }
char* DecorateGameName(unsigned int nBurnDrv) { static char szDecoratedName[256]; unsigned int nOldBurnDrv = nBurnDrvSelect; nBurnDrvSelect = nBurnDrv; const char* s1 = ""; const char* s2 = ""; const char* s3 = ""; const char* s4 = ""; const char* s5 = ""; const char* s6 = ""; const char* s7 = ""; const char* s8 = ""; const char* s9 = ""; const char* s10 = ""; const char* s11 = ""; const char* s12 = ""; const char* s13 = ""; const char* s14 = ""; s1 = BurnDrvGetTextA(DRV_FULLNAME); if ((BurnDrvGetFlags() & BDF_DEMO) || (BurnDrvGetFlags() & BDF_HACK) || (BurnDrvGetFlags() & BDF_HOMEBREW) || (BurnDrvGetFlags() & BDF_PROTOTYPE) || (BurnDrvGetFlags() & BDF_BOOTLEG) || (BurnDrvGetTextA(DRV_COMMENT) && strlen(BurnDrvGetTextA(DRV_COMMENT)) > 0)) { s2 = " ["; if (BurnDrvGetFlags() & BDF_DEMO) { s3 = "Demo"; if ((BurnDrvGetFlags() & BDF_HACK) || (BurnDrvGetFlags() & BDF_HOMEBREW) || (BurnDrvGetFlags() & BDF_PROTOTYPE) || (BurnDrvGetFlags() & BDF_BOOTLEG) || (BurnDrvGetTextA(DRV_COMMENT) && strlen(BurnDrvGetTextA(DRV_COMMENT)) > 0)) { s4 = ", "; } } if (BurnDrvGetFlags() & BDF_HACK) { s5 = "Hack"; if ((BurnDrvGetFlags() & BDF_HOMEBREW) || (BurnDrvGetFlags() & BDF_PROTOTYPE) || (BurnDrvGetFlags() & BDF_BOOTLEG) || (BurnDrvGetTextA(DRV_COMMENT) && strlen(BurnDrvGetTextA(DRV_COMMENT)) > 0)) { s6 = ", "; } } if (BurnDrvGetFlags() & BDF_HOMEBREW) { s7 = "Homebrew"; if ((BurnDrvGetFlags() & BDF_PROTOTYPE) || (BurnDrvGetFlags() & BDF_BOOTLEG) || (BurnDrvGetTextA(DRV_COMMENT) && strlen(BurnDrvGetTextA(DRV_COMMENT)) > 0)) { s8 = ", "; } } if (BurnDrvGetFlags() & BDF_PROTOTYPE) { s9 = "Prototype"; if ((BurnDrvGetFlags() & BDF_BOOTLEG) || (BurnDrvGetTextA(DRV_COMMENT) && strlen(BurnDrvGetTextA(DRV_COMMENT)) > 0)) { s10 = ", "; } } if (BurnDrvGetFlags() & BDF_BOOTLEG) { s11 = "Bootleg"; if (BurnDrvGetTextA(DRV_COMMENT) && strlen(BurnDrvGetTextA(DRV_COMMENT)) > 0) { s12 = ", "; } } if (BurnDrvGetTextA(DRV_COMMENT) && strlen(BurnDrvGetTextA(DRV_COMMENT)) > 0) { s13 = BurnDrvGetTextA(DRV_COMMENT); } s14 = "]"; } sprintf(szDecoratedName, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s", s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14); nBurnDrvSelect = nOldBurnDrv; return szDecoratedName; }
static void set_led_draw_position() { led_position = led_position0; if (screen_flipped ^ flipscreen) { switch (led_position & 3) { case LED_POSITION_TOP_LEFT: led_position = LED_POSITION_BOTTOM_RIGHT; break; case LED_POSITION_TOP_RIGHT: led_position = LED_POSITION_BOTTOM_LEFT; break; case LED_POSITION_BOTTOM_LEFT: led_position = LED_POSITION_TOP_RIGHT; break; case LED_POSITION_BOTTOM_RIGHT: led_position = LED_POSITION_TOP_LEFT; break; } } if (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) { BurnDrvGetVisibleSize(&nScreenHeight, &nScreenWidth); led_xadv = 0; led_yadv = led_size + 1; switch (led_position & 3) { case LED_POSITION_TOP_LEFT: led_xpos = (nScreenWidth - 1) - led_size; led_ypos = 1; break; case LED_POSITION_BOTTOM_RIGHT: led_xpos = 1; led_ypos = (nScreenHeight - 1) - (led_yadv * led_count); break; case LED_POSITION_BOTTOM_LEFT: led_xpos = 1; led_ypos = 1; break; case LED_POSITION_TOP_RIGHT: default: led_xpos = (nScreenWidth - 1) - led_size; led_ypos = (nScreenHeight - 1) - (led_yadv * led_count); break; } } else { BurnDrvGetVisibleSize(&nScreenWidth, &nScreenHeight); led_xadv = led_size + 1; led_yadv = 0; switch (led_position & 3) { case LED_POSITION_BOTTOM_LEFT: led_xpos = 1; led_ypos = (nScreenHeight - 1) - led_size; // led_ypos; break; case LED_POSITION_TOP_RIGHT: led_xpos = (nScreenWidth - 1) - (led_xadv * led_count); led_ypos = 1; break; case LED_POSITION_TOP_LEFT: led_xpos = 1; led_ypos = 1; break; case LED_POSITION_BOTTOM_RIGHT: default: led_xpos = (nScreenWidth - 1) - (led_xadv * led_count); led_ypos = (nScreenHeight - 1) - led_size; break; } } }