-
-//
-// Generic ROM loading
-//
-uint32 JaguarLoadROM(uint8 * rom, char * path)
-{
- uint32 romSize = 0;
-
- char * ext = strrchr(path, '.');
- if (ext != NULL)
- {
- WriteLog("VJ: Loading \"%s\"...", path);
-
- if (stricmp(ext, ".zip") == 0)
- {
- // Handle ZIP file loading here...
- WriteLog("(ZIPped)...");
-
- if (load_zipped_file(0, 0, path, NULL, &rom, &romSize) == -1)
- {
- WriteLog("Failed!\n");
- return 0;
- }
- }
- else
- {
-/* FILE * fp = fopen(path, "rb");
-
- if (fp == NULL)
- {
- WriteLog("Failed!\n");
- return 0;
- }
-
- fseek(fp, 0, SEEK_END);
- romSize = ftell(fp);
- fseek(fp, 0, SEEK_SET);
- fread(rom, 1, romSize, fp);
- fclose(fp);*/
-
- gzFile fp = gzopen(path, "rb");
-
- if (fp == NULL)
- {
- WriteLog("Failed!\n");
- return 0;
- }
-
- romSize = gzfilelength(fp);
- gzseek(fp, 0, SEEK_SET);
- gzread(fp, rom, romSize);
- gzclose(fp);
- }
-
- WriteLog("OK (%i bytes)\n", romSize);
- }
-
- return romSize;
-}
-
-//
-// Jaguar cartridge ROM loading
-//
-void JaguarLoadCart(uint8 * mem, char * path)
-{
- uint32 romSize = JaguarLoadROM(mem, path);
-
- if (romSize == 0)
- {
- char newPath[2048];
- WriteLog("VJ: Trying GUI...\n");
-
-//This is not *nix friendly for some reason...
-// if (!UserSelectFile(path, newPath))
- if (!UserSelectFile((strlen(path) == 0 ? (char *)"." : 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);
- eeprom_init();
-}
-
-//
-// Get the length of a (possibly) gzipped file
-//
-int gzfilelength(gzFile gd)
-{
- int size = 0, length = 0;
- unsigned char buffer[0x10000];
-
- gzrewind(gd);
-
- do
- {
- // Read in chunks until EOF
- size = gzread(gd, buffer, 0x10000);
-
- if (size <= 0)
- break;
-
- length += size;
- }
- while (!gzeof(gd));
-
- gzrewind(gd);
- return length;
-}