]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/vj.cpp
Changes for upcoming 1.0.5 release
[virtualjaguar] / src / vj.cpp
index 21d8ffbf8a6dbbde130c8bc1d30755caf5b5bd04..9dbfe023f6077b66a4129694e70e331b53fda5f0 100644 (file)
@@ -47,6 +47,7 @@ char * jaguar_eeproms_path = "./eeproms/";
 char jaguar_boot_dir[1024];
 
 SDL_Surface * surface, * mainSurface;
+int16 * backbuffer = NULL;
 SDL_Joystick * joystick;
 Uint32 mainSurfaceFlags = SDL_SWSURFACE;
 
@@ -57,30 +58,11 @@ bool hardwareTypeNTSC = true;                       // Set to false for PAL
 bool useJoystick = false;
 bool showGUI = false;
 
-int16 * backbuffer = NULL;
-
 // Added/changed by SDLEMU http://sdlemu.ngemu.com
 
-uint32 totalFrames;//so we can grab this from elsewhere...
+uint32 totalFrames;//temp, so we can grab this from elsewhere...
 int main(int argc, char * argv[])
 {
-
-/*DIR * dp = opendir("../../ROMs/");
-if (dp == NULL)
-       printf("Could not open directory!\n");
-else
-{
-       dirent * de;
-       while ((de = readdir(dp)) != NULL)
-       {
-               char * ext = strrchr(de->d_name, '.');
-               if (strcmpi(ext, ".zip") == 0 || strcmpi(ext, ".jag") == 0)
-                       printf("--> %s\n", de->d_name);
-       }
-
-       closedir(dp);
-}*/
-
        uint32 startTime;//, totalFrames;//, endTime;//, w, h;
        uint32 nNormalLast = 0;
        int32 nNormalFrac = 0; 
@@ -298,9 +280,7 @@ else
                        // GUI stuff here...
                        if (showGUI)
                        {
-                               extern uint32 gpu_pc;
-                               extern uint32 dsp_pc;
-                               DrawText(backbuffer, 8, 0, true, "Friendly GUI brought to you by JLH ;-)");
+                               extern uint32 gpu_pc, dsp_pc;
                                DrawText(backbuffer, 8, 8, false, "GPU PC: %08X", gpu_pc);
                                DrawText(backbuffer, 8, 16, false, "DSP PC: %08X", dsp_pc);
                        }
@@ -308,20 +288,7 @@ else
                        // Simple frameskip
                        if (nFrame == nFrameskip)
                        {
-                               if (SDL_MUSTLOCK(surface))
-                                       while (SDL_LockSurface(surface) < 0)
-                                               SDL_Delay(10);
-
-                               memcpy(surface->pixels, backbuffer, tom_width * tom_height * 2);
-
-                               if (SDL_MUSTLOCK(surface))
-                                       SDL_UnlockSurface(surface);
-
-                               SDL_Rect srcrect, dstrect;
-                               srcrect.x = srcrect.y = 0, srcrect.w = surface->w, srcrect.h = surface->h;
-                               dstrect.x = dstrect.y = 0, dstrect.w = surface->w, dstrect.h = surface->h;
-                               SDL_BlitSurface(surface, &srcrect, mainSurface, &dstrect);
-                           SDL_Flip(mainSurface);      
+                               BlitBackbuffer();
                                nFrame = 0;
                        }
                        else
@@ -351,140 +318,6 @@ else
     return 0;
 }
 
-//
-// Very very crude GUI file selector
-//
-uint32 DoROMFind(uint8 * mem, char * path)
-{
-       char cartName[2048];    // Really, should be MAX_PATH or something like it
-       uint32 numFiles = 0;
-       DIR * dp = opendir(path);
-
-       if (dp == NULL)
-       {
-               WriteLog("VJ: Could not open directory \"%s\"!\nAborting!\n", path);
-               log_done();
-               exit(0);
-       }
-       else
-       {
-               dirent * de;
-               while ((de = readdir(dp)) != NULL)
-               {
-                       char * ext = strrchr(de->d_name, '.');
-                       if (ext != NULL)
-                               if (strcmpi(ext, ".zip") == 0 || strcmpi(ext, ".jag") == 0)
-                                       numFiles++;
-               }
-               closedir(dp);
-       }
-
-       if (numFiles == 0)
-       {
-               WriteLog("Found no ROM files!\nAborting!\n");
-               log_done();
-               exit(0);
-       }
-
-       char * names = (char *)malloc(numFiles * 2048);
-       if (names == NULL)
-       {
-               WriteLog("Could not allocate memory for %u files!\nAborting!\n", numFiles);
-               log_done();
-               exit(0);
-       }
-
-       int i = 0;
-       dp = opendir(path);
-       dirent * de;
-       while ((de = readdir(dp)) != NULL)
-       {
-               char * ext = strrchr(de->d_name, '.');
-               if (ext != NULL)
-                       if (strcmpi(ext, ".zip") == 0 || strcmpi(ext, ".jag") == 0)
-                               strcpy(&names[i++ * 2048], de->d_name);
-       }
-       closedir(dp);
-
-       // Main GUI selection loop
-
-       uint32 cursor = 0;
-
-       if (numFiles > 1)       // Only go GUI if more than one possibility!
-       {
-       bool done = false;
-       uint32 limit = (numFiles > 24 ? 24 : numFiles);
-       SDL_Event event;
-       while (!done)
-       
-       while (SDL_PollEvent(&event))
-       {
-               // Draw the GUI...
-               memset(backbuffer, 0x11, tom_getVideoModeWidth() * tom_getVideoModeHeight() * 2);
-               uint32 startFile = (cursor >= limit ? cursor - limit + 1 : 0);
-               for(uint32 i=0; i<limit; i++)
-               {
-                       bool invert = (cursor == startFile + i ? true : false);
-                       char buf[41];
-                       // Guarantee that we clip our strings to fit in the screen...
-                       memcpy(buf, &names[(startFile + i) * 2048], 38);
-                       buf[38] = 0;
-                       DrawText(backbuffer, 0, i*8, invert, " %s ", buf);
-               }
-
-
-                               if (SDL_MUSTLOCK(surface))
-                                       while (SDL_LockSurface(surface) < 0)
-                                               SDL_Delay(10);
-
-//                             memcpy(surface->pixels, backbuffer, tom_width * tom_height * 2);
-                               memcpy(surface->pixels, backbuffer, tom_getVideoModeWidth() * tom_getVideoModeHeight() * 2);
-
-                               if (SDL_MUSTLOCK(surface))
-                                       SDL_UnlockSurface(surface);
-
-                               SDL_Rect srcrect, dstrect;
-                               srcrect.x = srcrect.y = 0, srcrect.w = surface->w, srcrect.h = surface->h;
-                               dstrect.x = dstrect.y = 0, dstrect.w = surface->w, dstrect.h = surface->h;
-                               SDL_BlitSurface(surface, &srcrect, mainSurface, &dstrect);
-                           SDL_Flip(mainSurface);      
-
-
-               if (event.type == SDL_KEYDOWN)
-               {
-                       switch (event.key.keysym.sym)
-                       {
-                       case SDLK_UP:
-                               if (cursor != 0)
-                                       cursor--;
-                               break;
-                       case SDLK_DOWN:
-                               if (cursor != numFiles - 1)
-                                       cursor++;
-                               break;
-                       case SDLK_RETURN:
-                               done = true;
-                               break;
-                       }
-               }
-       }
-       }
-
-       strcpy(cartName, path);
-       if (path[strlen(path) - 1] != '/')
-               strcat(cartName, "/");
-       strcat(cartName, &names[cursor * 2048]);
-       free(names);
-
-       uint32 romSize = JaguarLoadROM(mem, cartName);
-       if (romSize == 0)
-       {
-               log_done();
-               exit(0);
-       }
-       return romSize;
-}
-
 //
 // Generic ROM loading
 //
@@ -505,8 +338,6 @@ uint32 JaguarLoadROM(uint8 * rom, char * path)
                        if (load_zipped_file(0, 0, path, NULL, &rom, &romSize) == -1)
                        {
                                WriteLog("Failed!\n");
-//                             log_done();
-//                             exit(0);
                                return 0;
                        }
                }
@@ -517,8 +348,6 @@ uint32 JaguarLoadROM(uint8 * rom, char * path)
                        if (fp == NULL)
                        {
                                WriteLog("Failed!\n");
-//                             log_done();
-//                             exit(0);
                                return 0;
                        }
 
@@ -544,11 +373,27 @@ void JaguarLoadCart(uint8 * mem, char * path)
 
        if (romSize == 0)
        {
+               char newPath[2048];
                WriteLog("VJ: Trying GUI...\n");
-               romSize = DoROMFind(mem, path);
+
+               if (!UserSelectFile(path, newPath))
+               {
+                       WriteLog("VJ: Could not find valid ROM in directory \"%s\"...\nAborting!\n", path);
+                       log_done();
+                       exit(0);
+               }
+
+               romSize = JaguarLoadROM(mem, newPath);
+
+               if (romSize == 0)
+               {
+                       WriteLog("VJ: Could not load ROM from file \"%s\"...\nAborting!\n", newPath);
+                       log_done();
+                       exit(0);
+               }
        }
 
        jaguar_mainRom_crc32 = crc32_calcCheckSum(jaguar_mainRom, romSize);
-       WriteLog( "CRC: %08X\n", (unsigned int)jaguar_mainRom_crc32);
+       WriteLog("CRC: %08X\n", (unsigned int)jaguar_mainRom_crc32);
        eeprom_init();
 }