[libgens] EmuContextFactory::createContext(): Added a region parameter.
authorDavid Korth <gerbilsoft@gerbilsoft.com>
Sun, 3 Apr 2016 01:34:00 +0000 (21:34 -0400)
committerDavid Korth <gerbilsoft@gerbilsoft.com>
Sun, 3 Apr 2016 01:34:00 +0000 (21:34 -0400)
This allows setting the initial region.

[gens-qt4] EmuManager: Specify lg_region when creating EmuContext.

This fixes the initial region. Previously, it was always set to
SysVersion::REGION_US_NTSC, regardless of the user's setting.

This fixes a regression from commit f1f539b164d3421025be8d0a70f4932cb1bd06f6.
([gens-qt4] EmuManager::loadRom_int(): Support loading Pico ROMs.)

src/gens-qt4/EmuManager.cpp
src/libgens/EmuContext/EmuContextFactory.cpp
src/libgens/EmuContext/EmuContextFactory.hpp

index 0f00791..e1353f2 100644 (file)
@@ -406,7 +406,6 @@ int EmuManager::loadRom_int(LibGens::Rom *rom)
        // Determine the system region code.
        const LibGens::SysVersion::RegionCode_t cfg_region =
                                (LibGens::SysVersion::RegionCode_t)gqt4_cfg->getInt(QLatin1String("System/regionCode"));
-
        const LibGens::SysVersion::RegionCode_t lg_region = GetLgRegionCode(
                                cfg_region, rom->regionCode(),
                                (uint16_t)gqt4_cfg->getUInt(QLatin1String("System/regionCodeOrder")));
@@ -434,7 +433,7 @@ int EmuManager::loadRom_int(LibGens::Rom *rom)
 
        // Create the emulation context.
        // TODO: Move the emuContext to GensWindow.
-       gqt4_emuContext = EmuContextFactory::createContext(rom);
+       gqt4_emuContext = EmuContextFactory::createContext(rom, lg_region);
        rom->close();   // TODO: Let EmuContext handle this...
 
        if (!gqt4_emuContext || !gqt4_emuContext->isRomOpened()) {
@@ -518,6 +517,7 @@ LibGens::SysVersion::RegionCode_t EmuManager::GetLgRegionCode(
                LibGens::SysVersion::RegionCode_t confRegionCode,
                int mdHexRegionCode, uint16_t regionCodeOrder)
 {
+       // FIXME: Move to LibGens::SysVersion?
        if (confRegionCode >= LibGens::SysVersion::REGION_JP_NTSC &&
            confRegionCode <= LibGens::SysVersion::REGION_EU_PAL)
        {
@@ -528,26 +528,22 @@ LibGens::SysVersion::RegionCode_t EmuManager::GetLgRegionCode(
        // Attempt to auto-detect the region from the ROM image.
        int regionMatch = 0;
        int orderTmp = regionCodeOrder;
-       for (int i = 0; i < 4; i++, orderTmp <<= 4)
-       {
+       for (int i = 0; i < 4; i++, orderTmp <<= 4) {
                int orderN = ((orderTmp >> 12) & 0xF);
-               if (mdHexRegionCode & orderN)
-               {
+               if (mdHexRegionCode & orderN) {
                        // Found a match.
                        regionMatch = orderN;
                        break;
                }
        }
        
-       if (regionMatch == 0)
-       {
+       if (regionMatch == 0) {
                // No region matched.
                // Use the highest-priority region.
                regionMatch = ((regionCodeOrder >> 12) & 0xF);
        }
        
-       switch (regionMatch & 0xF)
-       {
+       switch (regionMatch & 0xF) {
                default:
                case 0x4:       return LibGens::SysVersion::REGION_US_NTSC;
                case 0x8:       return LibGens::SysVersion::REGION_EU_PAL;
index 265fa3b..155bfdf 100644 (file)
@@ -76,15 +76,19 @@ bool EmuContextFactory::isRomSystemSupported(const Rom *rom)
 /**
  * Create an EmuContext for the given ROM.
  * @param rom ROM for the EmuContext.
+ * @param region Region code. (TODO: Default to REGION_AUTO.)
  * @return EmuContext, or nullptr on error.
  */
-EmuContext *EmuContextFactory::createContext(Rom *rom)
+EmuContext *EmuContextFactory::createContext(Rom *rom, SysVersion::RegionCode_t region)
 {
+       // TODO: Implement REGION_AUTO.
+       assert(region != SysVersion::REGION_AUTO);
+
        switch (rom->sysId()) {
                case Rom::MDP_SYSTEM_MD:
-                       return new EmuMD(rom);
+                       return new EmuMD(rom, region);
                case Rom::MDP_SYSTEM_PICO:
-                       return new EmuPico(rom);
+                       return new EmuPico(rom, region);
 
                default:
                        break;
index e8bee7f..006c28c 100644 (file)
 #ifndef __LIBGENS_EMUCONTEXT_EMUCONTEXTFACTORY_HPP__
 #define __LIBGENS_EMUCONTEXT_EMUCONTEXTFACTORY_HPP__
 
+// Region code.
+// TODO: Make the region code non-console-specific.
+#include "SysVersion.hpp"
+
 namespace LibGens {
 
 class EmuContext;
@@ -58,9 +62,10 @@ class EmuContextFactory
                /**
                 * Create an EmuContext for the given ROM.
                 * @param rom ROM for the EmuContext.
+                * @param region Region code. (TODO: Default to REGION_AUTO.)
                 * @return EmuContext, or nullptr on error.
                 */
-               static EmuContext *createContext(Rom *rom);
+               static EmuContext *createContext(Rom *rom, SysVersion::RegionCode_t region = SysVersion::REGION_US_NTSC);
 };
 
 }