]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/file.cpp
Added new 68000 cpu core based on UAE's 68000. Here be dragons. ;-)
[virtualjaguar] / src / file.cpp
index 4b389e653503f432df0524dd22017e91d5343768..71f33e7199ad6bd2b59088c2d3880990ddfba6e5 100644 (file)
@@ -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