Jaguar model and BIOS configuration integration
authorJean-Paul Mari <djipi.mari@gmail.com>
Sat, 8 Sep 2018 11:34:48 +0000 (07:34 -0400)
committerJean-Paul Mari <djipi.mari@gmail.com>
Sat, 8 Sep 2018 11:34:48 +0000 (07:34 -0400)
src/gui/mainwin.cpp
src/jaguar.cpp

index 5a0c4fd..bf7db69 100644 (file)
@@ -28,6 +28,7 @@
 // JPM  09/12/2017  Added the keybindings in the settings\r
 // JPM  11/04/2017  Added the local window\r
 // JPM  08/31/2018  Added the call stack window\r
 // JPM  09/12/2017  Added the keybindings in the settings\r
 // JPM  11/04/2017  Added the local window\r
 // JPM  08/31/2018  Added the call stack window\r
+// JPM  09/04/2018  Added the new Models and BIOS handler\r
 //\r
 \r
 // FIXED:\r
 //\r
 \r
 // FIXED:\r
 #include "jaguar.h"\r
 #include "log.h"\r
 #include "file.h"\r
 #include "jaguar.h"\r
 #include "log.h"\r
 #include "file.h"\r
+#ifndef NEWMODELSBIOSHANDLER\r
 #include "jagbios.h"\r
 #include "jagbios2.h"\r
 #include "jagbios.h"\r
 #include "jagbios2.h"\r
-#include "jagcdbios.h"\r
 #include "jagstub2bios.h"\r
 #include "jagstub2bios.h"\r
+#else\r
+#include "modelsBIOS.h"\r
+#endif\r
+#include "jagcdbios.h"\r
 #include "joystick.h"\r
 #include "m68000/m68kinterface.h"\r
 \r
 #include "joystick.h"\r
 #include "m68000/m68kinterface.h"\r
 \r
@@ -678,8 +683,13 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false),
        WriteLog("Virtual Jaguar %s Rx (Last full build was on %s %s)\n", VJ_RELEASE_VERSION, __DATE__, __TIME__);\r
        WriteLog("VJ: Initializing jaguar subsystem...\n");\r
        JaguarInit();\r
        WriteLog("Virtual Jaguar %s Rx (Last full build was on %s %s)\n", VJ_RELEASE_VERSION, __DATE__, __TIME__);\r
        WriteLog("VJ: Initializing jaguar subsystem...\n");\r
        JaguarInit();\r
-//     memcpy(jagMemSpace + 0xE00000, jaguarBootROM, 0x20000); // Use the stock BIOS\r
+\r
+#ifndef NEWMODELSBIOSHANDLER\r
+       //      memcpy(jagMemSpace + 0xE00000, jaguarBootROM, 0x20000); // Use the stock BIOS\r
        memcpy(jagMemSpace + 0xE00000, (vjs.biosType == BT_K_SERIES ? jaguarBootROM : jaguarBootROM2), 0x20000);        // Use the stock BIOS\r
        memcpy(jagMemSpace + 0xE00000, (vjs.biosType == BT_K_SERIES ? jaguarBootROM : jaguarBootROM2), 0x20000);        // Use the stock BIOS\r
+#else\r
+       SelectBIOS(vjs.biosType);\r
+#endif\r
 \r
        // Prevent the file scanner from running if filename passed\r
        // in on the command line...\r
 \r
        // Prevent the file scanner from running if filename passed\r
        // in on the command line...\r
@@ -703,7 +713,11 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false),
 \r
                // Attempt to load/run the ABS file...\r
                LoadSoftware(vjs.absROMPath);\r
 \r
                // Attempt to load/run the ABS file...\r
                LoadSoftware(vjs.absROMPath);\r
+#ifndef NEWMODELSBIOSHANDLER\r
                memcpy(jagMemSpace + 0xE00000, jaguarDevBootROM2, 0x20000);     // Use the stub BIOS\r
                memcpy(jagMemSpace + 0xE00000, jaguarDevBootROM2, 0x20000);     // Use the stub BIOS\r
+#else\r
+               SelectBIOS(vjs.biosType);\r
+#endif\r
                // Prevent the scanner from running...\r
                return;\r
        }\r
                // Prevent the scanner from running...\r
                return;\r
        }\r
@@ -725,8 +739,12 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false),
 \r
                // Attempt to load/run the ABS file...\r
                LoadSoftware(vjs.absROMPath);\r
 \r
                // Attempt to load/run the ABS file...\r
                LoadSoftware(vjs.absROMPath);\r
+#ifndef NEWMODELSBIOSHANDLER\r
                memcpy(jagMemSpace + 0xE00000, jaguarDevBootROM2, 0x20000);     // Use the stub BIOS\r
                                                                                                                                        // Prevent the scanner from running...\r
                memcpy(jagMemSpace + 0xE00000, jaguarDevBootROM2, 0x20000);     // Use the stub BIOS\r
                                                                                                                                        // Prevent the scanner from running...\r
+#else\r
+               SelectBIOS(vjs.biosType);\r
+#endif\r
                return;\r
        }\r
 \r
                return;\r
        }\r
 \r
@@ -1337,6 +1355,7 @@ void MainWin::LoadSoftware(QString file)
        running = false;                                                        // Prevent bad things(TM) from happening...\r
        pauseForFileSelector = false;                           // Reset the file selector pause flag\r
 \r
        running = false;                                                        // Prevent bad things(TM) from happening...\r
        pauseForFileSelector = false;                           // Reset the file selector pause flag\r
 \r
+#ifndef NEWMODELSBIOSHANDLER\r
        uint8_t * biosPointer = jaguarBootROM;\r
 \r
        if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger)\r
        uint8_t * biosPointer = jaguarBootROM;\r
 \r
        if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger)\r
@@ -1345,6 +1364,9 @@ void MainWin::LoadSoftware(QString file)
        }\r
 \r
        memcpy(jagMemSpace + 0xE00000, biosPointer, 0x20000);\r
        }\r
 \r
        memcpy(jagMemSpace + 0xE00000, biosPointer, 0x20000);\r
+#else\r
+       SelectBIOS(vjs.biosType);\r
+#endif\r
 \r
        powerAct->setDisabled(false);\r
        powerAct->setChecked(true);\r
 \r
        powerAct->setDisabled(false);\r
        powerAct->setChecked(true);\r
@@ -1376,6 +1398,7 @@ void MainWin::LoadSoftware(QString file)
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
+               // Prevent the Alpine mode to crash in case of software without a start address\r
                if (vjs.hardwareTypeAlpine && !jaguarRunAddress)\r
                {\r
                        ToggleRunState();\r
                if (vjs.hardwareTypeAlpine && !jaguarRunAddress)\r
                {\r
                        ToggleRunState();\r
@@ -1697,6 +1720,8 @@ void MainWin::ReadSettings(void)
        vjs.hardwareTypeNTSC = settings.value("hardwareTypeNTSC", true).toBool();\r
        vjs.frameSkip = settings.value("frameSkip", 0).toInt();\r
        vjs.useJaguarBIOS = settings.value("useJaguarBIOS", false).toBool();\r
        vjs.hardwareTypeNTSC = settings.value("hardwareTypeNTSC", true).toBool();\r
        vjs.frameSkip = settings.value("frameSkip", 0).toInt();\r
        vjs.useJaguarBIOS = settings.value("useJaguarBIOS", false).toBool();\r
+       vjs.useRetailBIOS = settings.value("useRetailBIOS", false).toBool();\r
+       vjs.useDevBIOS = settings.value("useDevBIOS", false).toBool();\r
        vjs.GPUEnabled = settings.value("GPUEnabled", true).toBool();\r
        vjs.DSPEnabled = settings.value("DSPEnabled", true).toBool();\r
        vjs.audioEnabled = settings.value("audioEnabled", true).toBool();\r
        vjs.GPUEnabled = settings.value("GPUEnabled", true).toBool();\r
        vjs.DSPEnabled = settings.value("DSPEnabled", true).toBool();\r
        vjs.audioEnabled = settings.value("audioEnabled", true).toBool();\r
@@ -1706,6 +1731,7 @@ void MainWin::ReadSettings(void)
        vjs.glFilter = settings.value("glFilterType", 1).toInt();\r
        vjs.renderType = settings.value("renderType", 0).toInt();\r
        vjs.biosType = settings.value("biosType", BT_M_SERIES).toInt();\r
        vjs.glFilter = settings.value("glFilterType", 1).toInt();\r
        vjs.renderType = settings.value("renderType", 0).toInt();\r
        vjs.biosType = settings.value("biosType", BT_M_SERIES).toInt();\r
+       vjs.jaguarModel = settings.value("jaguarModel", JAG_M_SERIES).toInt();\r
        vjs.useFastBlitter = settings.value("useFastBlitter", false).toBool();\r
        strcpy(vjs.EEPROMPath, settings.value("EEPROMs", QStandardPaths::writableLocation(QStandardPaths::DataLocation).append("/eeproms/")).toString().toUtf8().data());\r
        strcpy(vjs.ROMPath, settings.value("ROMs", QStandardPaths::writableLocation(QStandardPaths::DataLocation).append("/software/")).toString().toUtf8().data());\r
        vjs.useFastBlitter = settings.value("useFastBlitter", false).toBool();\r
        strcpy(vjs.EEPROMPath, settings.value("EEPROMs", QStandardPaths::writableLocation(QStandardPaths::DataLocation).append("/eeproms/")).toString().toUtf8().data());\r
        strcpy(vjs.ROMPath, settings.value("ROMs", QStandardPaths::writableLocation(QStandardPaths::DataLocation).append("/software/")).toString().toUtf8().data());\r
@@ -1963,6 +1989,8 @@ void MainWin::WriteSettings(void)
        settings.setValue("hardwareTypeNTSC", vjs.hardwareTypeNTSC);\r
        settings.setValue("frameSkip", vjs.frameSkip);\r
        settings.setValue("useJaguarBIOS", vjs.useJaguarBIOS);\r
        settings.setValue("hardwareTypeNTSC", vjs.hardwareTypeNTSC);\r
        settings.setValue("frameSkip", vjs.frameSkip);\r
        settings.setValue("useJaguarBIOS", vjs.useJaguarBIOS);\r
+       settings.setValue("useRetailBIOS", vjs.useRetailBIOS);\r
+       settings.setValue("useDevBIOS", vjs.useDevBIOS);\r
        settings.setValue("GPUEnabled", vjs.GPUEnabled);\r
        settings.setValue("DSPEnabled", vjs.DSPEnabled);\r
        settings.setValue("audioEnabled", vjs.audioEnabled);\r
        settings.setValue("GPUEnabled", vjs.GPUEnabled);\r
        settings.setValue("DSPEnabled", vjs.DSPEnabled);\r
        settings.setValue("audioEnabled", vjs.audioEnabled);\r
@@ -1971,6 +1999,7 @@ void MainWin::WriteSettings(void)
        settings.setValue("useOpenGL", vjs.useOpenGL);\r
        settings.setValue("glFilterType", vjs.glFilter);\r
        settings.setValue("renderType", vjs.renderType);\r
        settings.setValue("useOpenGL", vjs.useOpenGL);\r
        settings.setValue("glFilterType", vjs.glFilter);\r
        settings.setValue("renderType", vjs.renderType);\r
+       settings.setValue("jaguarModel", vjs.jaguarModel);\r
        settings.setValue("biosType", vjs.biosType);\r
        settings.setValue("useFastBlitter", vjs.useFastBlitter);\r
        settings.setValue("JagBootROM", vjs.jagBootPath);\r
        settings.setValue("biosType", vjs.biosType);\r
        settings.setValue("useFastBlitter", vjs.useFastBlitter);\r
        settings.setValue("JagBootROM", vjs.jagBootPath);\r
index 46c5eaa..90c35c9 100644 (file)
@@ -8,13 +8,18 @@
 //       the braindead way in which MAME handled memory when this was written. :-)
 //
 // JLH = James Hammons
 //       the braindead way in which MAME handled memory when this was written. :-)
 //
 // JLH = James Hammons
+// JPM = Jean-Paul Mari
 //
 // WHO  WHEN        WHAT
 // ---  ----------  -----------------------------------------------------------
 // JLH  11/25/2009  Major rewrite of memory subsystem and handlers
 //
 // WHO  WHEN        WHAT
 // ---  ----------  -----------------------------------------------------------
 // JLH  11/25/2009  Major rewrite of memory subsystem and handlers
+// JPM  09/04/2018  Added the new Models and BIOS handler
 //
 
 
 //
 
 
+#define NEWMODELSBIOSHANDLER                           // New Jaguar models and bios usage handler
+
+
 #include "jaguar.h"
 #include <QApplication>
 #include <QMessageBox>
 #include "jaguar.h"
 #include <QApplication>
 #include <QMessageBox>
@@ -39,7 +44,9 @@
 #include "settings.h"
 #include "tom.h"
 //#include "debugger/brkWin.h"
 #include "settings.h"
 #include "tom.h"
 //#include "debugger/brkWin.h"
-
+#ifdef NEWMODELSBIOSHANDLER
+#include "modelsBIOS.h"
+#endif
 
 #define CPU_DEBUG
 //Do this in makefile??? Yes! Could, but it's easier to define here...
 
 #define CPU_DEBUG
 //Do this in makefile??? Yes! Could, but it's easier to define here...
@@ -2216,8 +2223,10 @@ void JaguarReset(void)
 {
        // Only problem with this approach: It wipes out RAM loaded files...!
        // Contents of local RAM are quasi-stable; we simulate this by randomizing RAM contents
 {
        // Only problem with this approach: It wipes out RAM loaded files...!
        // Contents of local RAM are quasi-stable; we simulate this by randomizing RAM contents
-       for(uint32_t i=8; i<vjs.DRAM_size; i+=4)
+       for (uint32_t i = 8; i < vjs.DRAM_size; i += 4)
+       {
                *((uint32_t *)(&jaguarMainRAM[i])) = rand();
                *((uint32_t *)(&jaguarMainRAM[i])) = rand();
+       }
 
        // New timer base code stuffola...
        InitializeEventList();
 
        // New timer base code stuffola...
        InitializeEventList();
@@ -2226,10 +2235,20 @@ void JaguarReset(void)
 //Also, have to change this here and in JaguarReadXX() currently
        // Only use the system BIOS if it's available...! (it's always available now!)
        // AND only if a jaguar cartridge has been inserted.
 //Also, have to change this here and in JaguarReadXX() currently
        // Only use the system BIOS if it's available...! (it's always available now!)
        // AND only if a jaguar cartridge has been inserted.
+#ifndef NEWMODELSBIOSHANDLER
        if (vjs.useJaguarBIOS && jaguarCartInserted && !vjs.hardwareTypeAlpine && !vjs.softTypeDebugger)
        if (vjs.useJaguarBIOS && jaguarCartInserted && !vjs.hardwareTypeAlpine && !vjs.softTypeDebugger)
+       {
                memcpy(jaguarMainRAM, jagMemSpace + 0xE00000, 8);
                memcpy(jaguarMainRAM, jagMemSpace + 0xE00000, 8);
+#else
+       if (vjs.useJaguarBIOS && jaguarCartInserted)
+       {
+               SetBIOS();
+#endif
+       }
        else
        else
+       {
                SET32(jaguarMainRAM, 4, jaguarRunAddress);
                SET32(jaguarMainRAM, 4, jaguarRunAddress);
+       }
 
 //     WriteLog("jaguar_reset():\n");
        TOMReset();
 
 //     WriteLog("jaguar_reset():\n");
        TOMReset();