X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ffile.cpp;h=71f33e7199ad6bd2b59088c2d3880990ddfba6e5;hb=2d556a3eb52664e928014a72ad18edc13281de7e;hp=4b389e653503f432df0524dd22017e91d5343768;hpb=4333fdb4f2f297db8272d2ebc8323028df8c105f;p=virtualjaguar diff --git a/src/file.cpp b/src/file.cpp index 4b389e6..71f33e7 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -126,9 +126,11 @@ bool JaguarLoadFile(char * path) EepromInit(); jaguarRunAddress = 0x802000; // For non-BIOS runs, this is true int fileType = ParseFileType(buffer[0], buffer[1], jaguarROMSize); + jaguarCartInserted = false; if (fileType == JST_ROM) { + jaguarCartInserted = true; memcpy(jagMemSpace + 0x800000, buffer, jaguarROMSize); delete[] buffer; return true; @@ -186,7 +188,7 @@ bool JaguarLoadFile(char * path) // // "Alpine" file loading // Since the developers were coming after us with torches and pitchforks, we decided to -// allow this kind of thing. ;-) But ONLY FOR THE DEVS, DAMMIT! O_O +// allow this kind of thing. ;-) But ONLY FOR THE DEVS, DAMMIT! >:-U O_O // bool AlpineLoadFile(char * path) { @@ -215,7 +217,7 @@ bool AlpineLoadFile(char * path) // Maybe instead of this, we could try requiring the STUBULATOR ROM? Just a thought... // Try setting the vector to say, $1000 and putting an instruction there that loops forever: // This kludge works! Yeah! - SET32(jaguarMainRAM, 0x10, 0x00001000); + SET32(jaguarMainRAM, 0x10, 0x00001000); // Set Exception #4 (Illegal Instruction) SET16(jaguarMainRAM, 0x1000, 0x60FE); // Here: bra Here return true; @@ -252,7 +254,15 @@ static int gzfilelength(gzFile gd) // static bool CheckExtension(const char * filename, const char * ext) { + // Sanity checking... + if ((filename == NULL) || (ext == NULL)) + return false; + const char * filenameExt = strrchr(filename, '.'); // Get the file's extension (if any) + + if (filenameExt == NULL) + return false; + return (strcasecmp(filenameExt, ext) == 0 ? true : false); } @@ -297,7 +307,8 @@ uint32 GetFileFromZIP(const char * zipFile, FileType type, uint8 * &buffer) if ((type == FT_SOFTWARE) && (CheckExtension(ze->name, ".j64") || CheckExtension(ze->name, ".rom") || CheckExtension(ze->name, ".abs") - || CheckExtension(ze->name, ".cof") || CheckExtension(ze->name, ".jag"))) + || CheckExtension(ze->name, ".cof") || CheckExtension(ze->name, ".coff") + || CheckExtension(ze->name, ".jag"))) { found = true; WriteLog("FILE: Found software file '%s'.\n", ze->name); @@ -361,7 +372,8 @@ uint32 ParseFileType(uint8 header1, uint8 header2, uint32 size) // If the file size is divisible by 1M, we probably have an regular ROM. // We can also check our CRC32 against the internal ROM database to be sure. - if ((size % 1048576) == 0) + // (We also check for the Memory Track cartridge size here as well...) + if ((size % 1048576) == 0 || size == 131072) return JST_ROM; // If the file size + 8192 bytes is divisible by 1M, we probably have an