Unify dreamcast, naomi and atomiswave builds WIP
This commit is contained in:
parent
632aa95c2d
commit
f3a91de1af
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||
<cconfiguration id="cdt.managedbuild.toolchain.gnu.base.561256944">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.561256944" moduleId="org.eclipse.cdt.core.settings" name="Default">
|
||||
<externalSettings/>
|
||||
<extensions>
|
||||
<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration buildProperties="" id="cdt.managedbuild.toolchain.gnu.base.561256944" name="Default" parent="org.eclipse.cdt.build.core.emptycfg">
|
||||
<folderInfo id="cdt.managedbuild.toolchain.gnu.base.561256944.1159063585" name="/" resourcePath="">
|
||||
<toolChain id="cdt.managedbuild.toolchain.gnu.base.1876419875" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.base">
|
||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.GNU_ELF" id="cdt.managedbuild.target.gnu.platform.base.1672145497" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
|
||||
<builder id="cdt.managedbuild.target.gnu.builder.base.782452746" managedBuildOn="false" name="Gnu Make Builder.Default" superClass="cdt.managedbuild.target.gnu.builder.base"/>
|
||||
<tool id="cdt.managedbuild.tool.gnu.archiver.base.1192189541" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
|
||||
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.1508781103" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base"/>
|
||||
<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.129279683" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base"/>
|
||||
<tool id="cdt.managedbuild.tool.gnu.c.linker.base.436312589" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
|
||||
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.895089303" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base"/>
|
||||
<tool id="cdt.managedbuild.tool.gnu.assembler.base.1639000963" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base"/>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||
</cconfiguration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<project id="flycast-unified.null.998677973" name="flycast-unified"/>
|
||||
</storageModule>
|
||||
<storageModule moduleId="scannerConfiguration">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||
</cproject>
|
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>flycast-unified</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
||||
<triggers>clean,full,incremental,</triggers>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
||||
<triggers>full,incremental,</triggers>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||
<nature>org.eclipse.cdt.core.ccnature</nature>
|
||||
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<project>
|
||||
<configuration id="cdt.managedbuild.toolchain.gnu.base.561256944" name="Default">
|
||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
|
||||
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-379634980750180479" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
</provider>
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
</extension>
|
||||
</configuration>
|
||||
</project>
|
89
core/build.h
89
core/build.h
|
@ -345,94 +345,7 @@
|
|||
#define RAM_SIZE_MAX (32*1024*1024)
|
||||
#define VRAM_SIZE_MAX (16*1024*1024)
|
||||
#define ARAM_SIZE_MAX (8*1024*1024)
|
||||
|
||||
#if (DC_PLATFORM==DC_PLATFORM_DREAMCAST)
|
||||
|
||||
#define BUILD_DREAMCAST 1
|
||||
|
||||
//DC : 16 mb ram, 8 mb vram, 2 mb aram, 2 mb bios, 128k flash
|
||||
#define RAM_SIZE (16*1024*1024)
|
||||
#define VRAM_SIZE (8*1024*1024)
|
||||
#define ARAM_SIZE (2*1024*1024)
|
||||
#define BIOS_SIZE (2*1024*1024)
|
||||
#define FLASH_SIZE (128*1024)
|
||||
|
||||
#define ROM_PREFIX "dc_"
|
||||
#define ROM_NAMES
|
||||
#define NVR_OPTIONAL 0
|
||||
|
||||
#elif (DC_PLATFORM==DC_PLATFORM_DEV_UNIT)
|
||||
|
||||
#define BUILD_DEV_UNIT 1
|
||||
|
||||
//Devkit : 32 mb ram, 8? mb vram, 2? mb aram, 2? mb bios, ? flash
|
||||
#define RAM_SIZE (32*1024*1024)
|
||||
#define VRAM_SIZE (8*1024*1024)
|
||||
#define ARAM_SIZE (2*1024*1024)
|
||||
#define BIOS_SIZE (2*1024*1024)
|
||||
#define FLASH_SIZE (128*1024)
|
||||
|
||||
#define ROM_PREFIX "hkt_"
|
||||
#define ROM_NAMES
|
||||
#define NVR_OPTIONAL 0
|
||||
|
||||
#elif (DC_PLATFORM==DC_PLATFORM_NAOMI)
|
||||
|
||||
//Naomi : 32 mb ram, 16 mb vram, 8 mb aram, 2 mb bios, ? flash
|
||||
#define RAM_SIZE (32*1024*1024)
|
||||
#define VRAM_SIZE (16*1024*1024)
|
||||
#define ARAM_SIZE (8*1024*1024)
|
||||
#define BIOS_SIZE (2*1024*1024)
|
||||
#define BBSRAM_SIZE (32*1024)
|
||||
|
||||
#define ROM_PREFIX "naomi_"
|
||||
#define ROM_NAMES ";epr-21576d.bin"
|
||||
#define NVR_OPTIONAL 1
|
||||
|
||||
#elif (DC_PLATFORM==DC_PLATFORM_NAOMI2)
|
||||
|
||||
//Naomi2 : 32 mb ram, 16 mb vram, 8 mb aram, 2 mb bios, ? flash
|
||||
#define RAM_SIZE (32*1024*1024)
|
||||
#define VRAM_SIZE (16*1024*1024)
|
||||
#define ARAM_SIZE (8*1024*1024)
|
||||
#define BIOS_SIZE (2*1024*1024)
|
||||
#define BBSRAM_SIZE (32*1024)
|
||||
|
||||
#define ROM_PREFIX "n2_"
|
||||
#define ROM_NAMES
|
||||
#define NVR_OPTIONAL 1
|
||||
|
||||
#elif (DC_PLATFORM==DC_PLATFORM_ATOMISWAVE)
|
||||
|
||||
#define BUILD_ATOMISWAVE 1
|
||||
|
||||
//Atomiswave : 16 mb ram, 8 mb vram, 8 mb aram, 128kb bios on flash, 128kb battery-backed ram
|
||||
#define RAM_SIZE (16*1024*1024)
|
||||
#define VRAM_SIZE (8*1024*1024)
|
||||
#define ARAM_SIZE (8*1024*1024)
|
||||
#define BIOS_SIZE (128*1024)
|
||||
#define BBSRAM_SIZE (128*1024)
|
||||
|
||||
#define ROM_PREFIX "aw_"
|
||||
#define ROM_NAMES ";bios.ic23_l"
|
||||
#define NVR_OPTIONAL 1
|
||||
|
||||
#else
|
||||
#error invalid build config
|
||||
#endif
|
||||
|
||||
#define RAM_MASK (RAM_SIZE-1)
|
||||
#define VRAM_MASK (VRAM_SIZE-1)
|
||||
#define ARAM_MASK (ARAM_SIZE-1)
|
||||
#define BIOS_MASK (BIOS_SIZE-1)
|
||||
|
||||
#ifdef FLASH_SIZE
|
||||
#define FLASH_MASK (FLASH_SIZE-1)
|
||||
#endif
|
||||
|
||||
#ifdef BBSRAM_SIZE
|
||||
#define BBSRAM_MASK (BBSRAM_SIZE-1)
|
||||
#endif
|
||||
#define BUILD_DREAMCAST 1
|
||||
|
||||
#define GD_CLOCK 33868800 //GDROM XTAL -- 768fs
|
||||
|
||||
|
|
|
@ -133,8 +133,7 @@ bool ParseCommandLine(int argc,wchar* argv[])
|
|||
|
||||
if (extension
|
||||
&& (stricmp(extension, ".cdi") == 0 || stricmp(extension, ".chd") == 0
|
||||
|| stricmp(extension, ".gdi") == 0 || stricmp(extension, ".lst") == 0
|
||||
|| stricmp(extension, ".cue") == 0))
|
||||
|| stricmp(extension, ".gdi") == 0 || stricmp(extension, ".cue") == 0))
|
||||
{
|
||||
INFO_LOG(COMMON, "Using '%s' as cd image", *arg);
|
||||
cfgSetVirtual("config", "image", *arg);
|
||||
|
@ -147,12 +146,8 @@ bool ParseCommandLine(int argc,wchar* argv[])
|
|||
}
|
||||
else
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_NAOMI || DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
INFO_LOG(COMMON, "Using '%s' as rom", *arg);
|
||||
cfgSetVirtual("config", "image", *arg);
|
||||
#else
|
||||
WARN_LOG(COMMON, "wtf %s is supposed to do ?",*arg);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
arg++;
|
||||
|
|
|
@ -33,7 +33,7 @@ extern "C" {
|
|||
}
|
||||
|
||||
#define VIXL_CODE_BUFFER_MALLOC
|
||||
|
||||
#define VIXL_DEBUG
|
||||
|
||||
#if defined(_ANDROID) && defined(VIXL_DEBUG)
|
||||
#include <android/log.h>
|
||||
|
|
|
@ -40,6 +40,11 @@ struct MemChip
|
|||
return rv;
|
||||
}
|
||||
|
||||
virtual void Write(u32 addr, u32 data, u32 size)
|
||||
{
|
||||
die("Method not supported");
|
||||
}
|
||||
|
||||
bool Load(const string& file)
|
||||
{
|
||||
FILE* f=fopen(file.c_str(),"rb");
|
||||
|
@ -119,20 +124,20 @@ struct MemChip
|
|||
INFO_LOG(FLASHROM, "Saved %s as %s", path, title.c_str());
|
||||
}
|
||||
virtual void Reset() {}
|
||||
virtual bool Serialize(void **data, unsigned int *total_size) { return true; }
|
||||
virtual bool Unserialize(void **data, unsigned int *total_size) { return true; }
|
||||
};
|
||||
|
||||
struct RomChip : MemChip
|
||||
{
|
||||
RomChip(u32 sz, u32 write_protect_size = 0) : MemChip(sz, write_protect_size) {}
|
||||
void Write(u32 addr,u32 data,u32 sz)
|
||||
{
|
||||
die("Write to RomChip is not possible, address=%x, data=%x, size=%d");
|
||||
}
|
||||
};
|
||||
|
||||
struct SRamChip : MemChip
|
||||
{
|
||||
SRamChip(u32 sz, u32 write_protect_size = 0) : MemChip(sz, write_protect_size) {}
|
||||
|
||||
void Write(u32 addr,u32 val,u32 sz)
|
||||
void Write(u32 addr,u32 val,u32 sz) override
|
||||
{
|
||||
addr&=mask;
|
||||
if (addr < write_protect_size)
|
||||
|
@ -152,6 +157,18 @@ struct SRamChip : MemChip
|
|||
die("invalid access size");
|
||||
}
|
||||
}
|
||||
|
||||
virtual bool Serialize(void **data, unsigned int *total_size)
|
||||
{
|
||||
REICAST_SA(&this->data[write_protect_size], size - write_protect_size);
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool Unserialize(void **data, unsigned int *total_size)
|
||||
{
|
||||
REICAST_USA(&this->data[write_protect_size], size - write_protect_size);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
|
@ -235,26 +252,27 @@ struct DCFlashChip : MemChip
|
|||
|
||||
virtual u8 Read8(u32 addr) override
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
switch (addr)
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
{
|
||||
case 0x1A002:
|
||||
case 0x1A0A2:
|
||||
if (settings.dreamcast.region <= 2)
|
||||
return '0' + settings.dreamcast.region;
|
||||
break;
|
||||
case 0x1A003:
|
||||
case 0x1A0A3:
|
||||
if (settings.dreamcast.language <= 5)
|
||||
return '0' + settings.dreamcast.language;
|
||||
break;
|
||||
case 0x1A004:
|
||||
case 0x1A0A4:
|
||||
if (settings.dreamcast.broadcast <= 3)
|
||||
return '0' + settings.dreamcast.broadcast;
|
||||
break;
|
||||
switch (addr)
|
||||
{
|
||||
case 0x1A002:
|
||||
case 0x1A0A2:
|
||||
if (settings.dreamcast.region <= 2)
|
||||
return '0' + settings.dreamcast.region;
|
||||
break;
|
||||
case 0x1A003:
|
||||
case 0x1A0A3:
|
||||
if (settings.dreamcast.language <= 5)
|
||||
return '0' + settings.dreamcast.language;
|
||||
break;
|
||||
case 0x1A004:
|
||||
case 0x1A0A4:
|
||||
if (settings.dreamcast.broadcast <= 3)
|
||||
return '0' + settings.dreamcast.broadcast;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
u32 rv=MemChip::Read8(addr);
|
||||
|
||||
|
@ -262,7 +280,7 @@ struct DCFlashChip : MemChip
|
|||
}
|
||||
|
||||
|
||||
void Write(u32 addr,u32 val,u32 sz)
|
||||
void Write(u32 addr,u32 val,u32 sz) override
|
||||
{
|
||||
if (sz != 1)
|
||||
die("invalid access size");
|
||||
|
@ -283,7 +301,7 @@ struct DCFlashChip : MemChip
|
|||
state = FS_ReadAMDID1;
|
||||
break;
|
||||
default:
|
||||
EMUERROR("Unknown FlashWrite mode: %x\n", val);
|
||||
INFO_LOG(FLASHROM, "Unknown FlashWrite mode: %x\n", val);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -357,15 +375,13 @@ struct DCFlashChip : MemChip
|
|||
{
|
||||
// chip erase
|
||||
INFO_LOG(FLASHROM, "Erasing Chip!");
|
||||
#if DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
u8 save[0x2000];
|
||||
// this area is write-protected on AW
|
||||
memcpy(save, data + 0x1a000, 0x2000);
|
||||
#endif
|
||||
if (settings.platform.system == DC_PLATFORM_ATOMISWAVE)
|
||||
// this area is write-protected on AW
|
||||
memcpy(save, data + 0x1a000, 0x2000);
|
||||
memset(data + write_protect_size, 0xff, size - write_protect_size);
|
||||
#if DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
memcpy(data + 0x1a000, save, 0x2000);
|
||||
#endif
|
||||
if (settings.platform.system == DC_PLATFORM_ATOMISWAVE)
|
||||
memcpy(data + 0x1a000, save, 0x2000);
|
||||
state = FS_Normal;
|
||||
}
|
||||
else if ((val & 0xff) == 0x30)
|
||||
|
@ -373,16 +389,14 @@ struct DCFlashChip : MemChip
|
|||
// sector erase
|
||||
if (addr >= write_protect_size)
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
u8 save[0x2000];
|
||||
// this area is write-protected on AW
|
||||
memcpy(save, data + 0x1a000, 0x2000);
|
||||
#endif
|
||||
if (settings.platform.system == DC_PLATFORM_ATOMISWAVE)
|
||||
// this area is write-protected on AW
|
||||
memcpy(save, data + 0x1a000, 0x2000);
|
||||
INFO_LOG(FLASHROM, "Erase Sector %08X! (%08X)", addr, addr & ~0x3FFF);
|
||||
memset(&data[addr&(~0x3FFF)],0xFF,0x4000);
|
||||
#if DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
memcpy(data + 0x1a000, save, 0x2000);
|
||||
#endif
|
||||
if (settings.platform.system == DC_PLATFORM_ATOMISWAVE)
|
||||
memcpy(data + 0x1a000, save, 0x2000);
|
||||
}
|
||||
state = FS_Normal;
|
||||
}
|
||||
|
@ -627,4 +641,18 @@ private:
|
|||
|
||||
return result;
|
||||
}
|
||||
|
||||
virtual bool Serialize(void **data, unsigned int *total_size)
|
||||
{
|
||||
REICAST_SA(&this->data[write_protect_size], size - write_protect_size);
|
||||
REICAST_S(state);
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool Unserialize(void **data, unsigned int *total_size)
|
||||
{
|
||||
REICAST_USA(&this->data[write_protect_size], size - write_protect_size);
|
||||
REICAST_US(state);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1121,20 +1121,9 @@ void GDROM_DmaEnable(u32 addr, u32 data)
|
|||
//Init/Term/Res
|
||||
void gdrom_reg_Init()
|
||||
{
|
||||
sb_rio_register(SB_GDST_addr, RIO_WF, 0, &GDROM_DmaStart);
|
||||
/*
|
||||
sb_regs[(SB_GDST_addr-SB_BASE)>>2].flags=REG_32BIT_READWRITE | REG_READ_DATA;
|
||||
sb_regs[(SB_GDST_addr-SB_BASE)>>2].writeFunction=GDROM_DmaStart;
|
||||
*/
|
||||
|
||||
sb_rio_register(SB_GDEN_addr, RIO_WF, 0, &GDROM_DmaEnable);
|
||||
/*
|
||||
sb_regs[(SB_GDEN_addr-SB_BASE)>>2].flags=REG_32BIT_READWRITE | REG_READ_DATA;
|
||||
sb_regs[(SB_GDEN_addr-SB_BASE)>>2].writeFunction=GDROM_DmaEnable;
|
||||
*/
|
||||
|
||||
gdrom_schid = sh4_sched_register(0, &GDRomschd);
|
||||
}
|
||||
|
||||
void gdrom_reg_Term()
|
||||
{
|
||||
|
||||
|
@ -1142,6 +1131,8 @@ void gdrom_reg_Term()
|
|||
|
||||
void gdrom_reg_Reset(bool Manual)
|
||||
{
|
||||
sb_rio_register(SB_GDST_addr, RIO_WF, 0, &GDROM_DmaStart);
|
||||
sb_rio_register(SB_GDEN_addr, RIO_WF, 0, &GDROM_DmaEnable);
|
||||
SB_GDST = 0;
|
||||
SB_GDEN = 0;
|
||||
}
|
||||
|
|
|
@ -773,32 +773,26 @@ void sb_Init()
|
|||
|
||||
asic_reg_Init();
|
||||
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
gdrom_reg_Init();
|
||||
#else
|
||||
naomi_reg_Init();
|
||||
#endif
|
||||
|
||||
pvr_sb_Init();
|
||||
maple_Init();
|
||||
aica_sb_Init();
|
||||
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST && defined(ENABLE_MODEM)
|
||||
#ifdef ENABLE_MODEM
|
||||
ModemInit();
|
||||
#endif
|
||||
}
|
||||
|
||||
void sb_Reset(bool Manual)
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST && defined(ENABLE_MODEM)
|
||||
#ifdef ENABLE_MODEM
|
||||
ModemTerm();
|
||||
#endif
|
||||
asic_reg_Reset(Manual);
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
gdrom_reg_Reset(Manual);
|
||||
#else
|
||||
naomi_reg_Reset(Manual);
|
||||
#endif
|
||||
pvr_sb_Reset(Manual);
|
||||
maple_Reset(Manual);
|
||||
aica_sb_Reset(Manual);
|
||||
|
@ -806,16 +800,13 @@ void sb_Reset(bool Manual)
|
|||
|
||||
void sb_Term()
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST && defined(ENABLE_MODEM)
|
||||
#ifdef ENABLE_MODEM
|
||||
ModemTerm();
|
||||
#endif
|
||||
aica_sb_Term();
|
||||
maple_Term();
|
||||
pvr_sb_Term();
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
gdrom_reg_Term();
|
||||
#else
|
||||
naomi_reg_Term();
|
||||
#endif
|
||||
asic_reg_Term();
|
||||
}
|
||||
|
|
|
@ -18,132 +18,139 @@
|
|||
#include "hw/flashrom/flashrom.h"
|
||||
#include "reios/reios.h"
|
||||
|
||||
#if DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
DCFlashChip sys_rom(BIOS_SIZE, BIOS_SIZE / 2);
|
||||
#else
|
||||
RomChip sys_rom(BIOS_SIZE);
|
||||
#endif
|
||||
|
||||
#ifdef FLASH_SIZE
|
||||
DCFlashChip sys_nvmem(FLASH_SIZE);
|
||||
#endif
|
||||
|
||||
#ifdef BBSRAM_SIZE
|
||||
SRamChip sys_nvmem(BBSRAM_SIZE);
|
||||
#endif
|
||||
MemChip *sys_rom;
|
||||
MemChip *sys_nvmem;
|
||||
|
||||
extern bool bios_loaded;
|
||||
|
||||
static std::string getRomPrefix()
|
||||
{
|
||||
switch (settings.platform.system)
|
||||
{
|
||||
case DC_PLATFORM_DREAMCAST:
|
||||
return "dc_";
|
||||
case DC_PLATFORM_NAOMI:
|
||||
return "naomi_";
|
||||
case DC_PLATFORM_ATOMISWAVE:
|
||||
return "aw_";
|
||||
default:
|
||||
die("Unsupported platform");
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
static bool nvmemOptional()
|
||||
{
|
||||
return settings.platform.system != DC_PLATFORM_DREAMCAST;
|
||||
}
|
||||
|
||||
bool LoadRomFiles(const string& root)
|
||||
{
|
||||
#if DC_PLATFORM != DC_PLATFORM_ATOMISWAVE
|
||||
if (!sys_rom.Load(root, ROM_PREFIX, "%boot.bin;%boot.bin.bin;%bios.bin;%bios.bin.bin" ROM_NAMES, "bootrom"))
|
||||
if (settings.platform.system != DC_PLATFORM_ATOMISWAVE)
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
// Dreamcast absolutely needs a BIOS
|
||||
msgboxf("Unable to find bios in %s. Exiting...", MBX_ICONERROR, root.c_str());
|
||||
return false;
|
||||
#endif
|
||||
if (!sys_rom->Load(root, getRomPrefix(), "%boot.bin;%boot.bin.bin;%bios.bin;%bios.bin.bin", "bootrom"))
|
||||
{
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
{
|
||||
// Dreamcast absolutely needs a BIOS
|
||||
msgboxf("Unable to find bios in %s. Exiting...", MBX_ICONERROR, root.c_str());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
bios_loaded = true;
|
||||
}
|
||||
bool rc;
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
rc = sys_nvmem->Load(root, getRomPrefix(), "%nvmem.bin;%flash_wb.bin;%flash.bin;%flash.bin.bin", "nvram");
|
||||
else
|
||||
bios_loaded = true;
|
||||
#endif
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
if (!sys_nvmem.Load(root, ROM_PREFIX, "%nvmem.bin;%flash_wb.bin;%flash.bin;%flash.bin.bin", "nvram"))
|
||||
#else
|
||||
if (!sys_nvmem.Load(get_game_save_prefix() + ".nvmem"))
|
||||
#endif
|
||||
rc = sys_nvmem->Load(get_game_save_prefix() + ".nvmem");
|
||||
if (!rc)
|
||||
{
|
||||
if (NVR_OPTIONAL)
|
||||
if (nvmemOptional())
|
||||
{
|
||||
INFO_LOG(FLASHROM, "flash/nvmem is missing, will create new file...");
|
||||
}
|
||||
else
|
||||
{
|
||||
msgboxf("Unable to find flash/nvmem in \n%s\nExiting...", MBX_ICONERROR, root.c_str());
|
||||
msgboxf("Unable to find flash/nvmem in %s. Exiting...", MBX_ICONERROR, root.c_str());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
struct flash_syscfg_block syscfg;
|
||||
int res = sys_nvmem.ReadBlock(FLASH_PT_USER, FLASH_USER_SYSCFG, &syscfg);
|
||||
|
||||
if (!res)
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
{
|
||||
// write out default settings
|
||||
memset(&syscfg, 0xff, sizeof(syscfg));
|
||||
syscfg.time_lo = 0;
|
||||
syscfg.time_hi = 0;
|
||||
syscfg.lang = 0;
|
||||
syscfg.mono = 0;
|
||||
syscfg.autostart = 1;
|
||||
struct flash_syscfg_block syscfg;
|
||||
int res = static_cast<DCFlashChip*>(sys_nvmem)->ReadBlock(FLASH_PT_USER, FLASH_USER_SYSCFG, &syscfg);
|
||||
|
||||
if (!res)
|
||||
{
|
||||
// write out default settings
|
||||
memset(&syscfg, 0xff, sizeof(syscfg));
|
||||
syscfg.time_lo = 0;
|
||||
syscfg.time_hi = 0;
|
||||
syscfg.lang = 0;
|
||||
syscfg.mono = 0;
|
||||
syscfg.autostart = 1;
|
||||
}
|
||||
u32 time = GetRTC_now();
|
||||
syscfg.time_lo = time & 0xffff;
|
||||
syscfg.time_hi = time >> 16;
|
||||
if (settings.dreamcast.language <= 5)
|
||||
syscfg.lang = settings.dreamcast.language;
|
||||
|
||||
if (static_cast<DCFlashChip*>(sys_nvmem)->WriteBlock(FLASH_PT_USER, FLASH_USER_SYSCFG, &syscfg) != 1)
|
||||
WARN_LOG(FLASHROM, "Failed to save time and language to flash RAM");
|
||||
}
|
||||
u32 time = GetRTC_now();
|
||||
syscfg.time_lo = time & 0xffff;
|
||||
syscfg.time_hi = time >> 16;
|
||||
if (settings.dreamcast.language <= 5)
|
||||
syscfg.lang = settings.dreamcast.language;
|
||||
|
||||
if (sys_nvmem.WriteBlock(FLASH_PT_USER, FLASH_USER_SYSCFG, &syscfg) != 1)
|
||||
WARN_LOG(FLASHROM, "Failed to save time and language to flash RAM");
|
||||
|
||||
#endif
|
||||
|
||||
#if DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
sys_rom.Load(get_game_save_prefix() + ".nvmem2");
|
||||
#endif
|
||||
if (settings.platform.system == DC_PLATFORM_ATOMISWAVE)
|
||||
sys_rom->Load(get_game_save_prefix() + ".nvmem2");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void SaveRomFiles(const string& root)
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
sys_nvmem.Save(root, ROM_PREFIX, "nvmem.bin", "nvmem");
|
||||
#else
|
||||
sys_nvmem.Save(get_game_save_prefix() + ".nvmem");
|
||||
#endif
|
||||
#if DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
sys_rom.Save(get_game_save_prefix() + ".nvmem2");
|
||||
#endif
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
sys_nvmem->Save(root, getRomPrefix(), "nvmem.bin", "nvmem");
|
||||
else
|
||||
sys_nvmem->Save(get_game_save_prefix() + ".nvmem");
|
||||
if (settings.platform.system == DC_PLATFORM_ATOMISWAVE)
|
||||
sys_rom->Save(get_game_save_prefix() + ".nvmem2");
|
||||
}
|
||||
|
||||
bool LoadHle(const string& root) {
|
||||
if (!sys_nvmem.Load(root, ROM_PREFIX, "%nvmem.bin;%flash_wb.bin;%flash.bin;%flash.bin.bin", "nvram")) {
|
||||
if (!sys_nvmem->Load(root, getRomPrefix(), "%nvmem.bin;%flash_wb.bin;%flash.bin;%flash.bin.bin", "nvram")) {
|
||||
INFO_LOG(FLASHROM, "No nvmem loaded");
|
||||
}
|
||||
|
||||
return reios_init(sys_rom.data, sys_nvmem.data);
|
||||
return reios_init(sys_rom->data, sys_nvmem->data);
|
||||
}
|
||||
|
||||
u32 ReadFlash(u32 addr,u32 sz) { return sys_nvmem.Read(addr,sz); }
|
||||
void WriteFlash(u32 addr,u32 data,u32 sz) { sys_nvmem.Write(addr,data,sz); }
|
||||
u32 ReadFlash(u32 addr,u32 sz) { return sys_nvmem->Read(addr,sz); }
|
||||
void WriteFlash(u32 addr,u32 data,u32 sz) { sys_nvmem->Write(addr,data,sz); }
|
||||
|
||||
#if (DC_PLATFORM == DC_PLATFORM_DREAMCAST) || (DC_PLATFORM == DC_PLATFORM_DEV_UNIT) || (DC_PLATFORM == DC_PLATFORM_NAOMI) || (DC_PLATFORM == DC_PLATFORM_NAOMI2)
|
||||
u32 ReadBios(u32 addr,u32 sz)
|
||||
{
|
||||
return sys_rom->Read(addr, sz);
|
||||
}
|
||||
|
||||
u32 ReadBios(u32 addr,u32 sz) { return sys_rom.Read(addr,sz); }
|
||||
void WriteBios(u32 addr,u32 data,u32 sz) { INFO_LOG(MEMORY, "Write to [Boot ROM] is not possible, addr=%x, data=%x, size=%d", addr, data, sz); }
|
||||
|
||||
#elif (DC_PLATFORM == DC_PLATFORM_ATOMISWAVE)
|
||||
u32 ReadBios(u32 addr,u32 sz)
|
||||
{
|
||||
return sys_rom.Read(addr, sz);
|
||||
}
|
||||
|
||||
void WriteBios(u32 addr,u32 data,u32 sz)
|
||||
void WriteBios(u32 addr,u32 data,u32 sz)
|
||||
{
|
||||
if (settings.platform.system == DC_PLATFORM_ATOMISWAVE)
|
||||
{
|
||||
if (sz != 1)
|
||||
{
|
||||
INFO_LOG(MEMORY, "Invalid access size @%08x data %x sz %d", addr, data, sz);
|
||||
return;
|
||||
}
|
||||
sys_rom.Write(addr, data, sz);
|
||||
sys_rom->Write(addr, data, sz);
|
||||
}
|
||||
|
||||
#else
|
||||
#error unknown flash
|
||||
#endif
|
||||
else
|
||||
{
|
||||
INFO_LOG(MEMORY, "Write to [Boot ROM] is not possible, addr=%x, data=%x, size=%d", addr, data, sz);
|
||||
}
|
||||
}
|
||||
|
||||
//Area 0 mem map
|
||||
//0x00000000- 0x001FFFFF :MPX System/Boot ROM
|
||||
|
@ -174,11 +181,9 @@ T DYNACALL ReadMem_area0(u32 addr)
|
|||
//map 0x0000 to 0x01FF to Default handler
|
||||
//mirror 0x0200 to 0x03FF , from 0x0000 to 0x03FFF
|
||||
//map 0x0000 to 0x001F
|
||||
#if DC_PLATFORM != DC_PLATFORM_ATOMISWAVE
|
||||
if (base<=0x001F)// :MPX System/Boot ROM
|
||||
#else
|
||||
if (base<=0x0001) // Only 128k BIOS on AtomisWave
|
||||
#endif
|
||||
|
||||
// :MPX System/Boot ROM
|
||||
if (base <= (settings.platform.system == DC_PLATFORM_ATOMISWAVE ? 0x0001 : 0x001F)) // Only 128k BIOS on AtomisWave
|
||||
{
|
||||
return ReadBios(addr,sz);
|
||||
}
|
||||
|
@ -196,11 +201,10 @@ T DYNACALL ReadMem_area0(u32 addr)
|
|||
}
|
||||
else if ((addr>= 0x005F7000) && (addr<= 0x005F70FF)) // GD-ROM
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_NAOMI || DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
return (T)ReadMem_naomi(addr,sz);
|
||||
#else
|
||||
return (T)ReadMem_gdrom(addr,sz);
|
||||
#endif
|
||||
if (settings.platform.system != DC_PLATFORM_DREAMCAST)
|
||||
return (T)ReadMem_naomi(addr, sz);
|
||||
else
|
||||
return (T)ReadMem_gdrom(addr, sz);
|
||||
}
|
||||
else if (likely((addr>= 0x005F6800) && (addr<=0x005F7CFF))) // /*:PVR i/f Control Reg.*/ -> ALL SB registers now
|
||||
{
|
||||
|
@ -217,12 +221,13 @@ T DYNACALL ReadMem_area0(u32 addr)
|
|||
//map 0x0060 to 0x0060
|
||||
else if ((base ==0x0060) /*&& (addr>= 0x00600000)*/ && (addr<= 0x006007FF)) // :MODEM
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_NAOMI || DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
return (T)libExtDevice_ReadMem_A0_006(addr, sz);
|
||||
#elif defined(ENABLE_MODEM)
|
||||
return (T)ModemReadMem_A0_006(addr, sz);
|
||||
if (settings.platform.system != DC_PLATFORM_DREAMCAST)
|
||||
return (T)libExtDevice_ReadMem_A0_006(addr, sz);
|
||||
else
|
||||
#if defined(ENABLE_MODEM)
|
||||
return (T)ModemReadMem_A0_006(addr, sz);
|
||||
#else
|
||||
return (T)0;
|
||||
return (T)0;
|
||||
#endif
|
||||
}
|
||||
//map 0x0060 to 0x006F
|
||||
|
@ -261,12 +266,8 @@ void DYNACALL WriteMem_area0(u32 addr,T data)
|
|||
const u32 base=(addr>>16);
|
||||
|
||||
//map 0x0000 to 0x001F
|
||||
#if DC_PLATFORM != DC_PLATFORM_ATOMISWAVE
|
||||
if ((base <=0x001F) /*&& (addr<=0x001FFFFF)*/)// :MPX System/Boot ROM
|
||||
#else
|
||||
|
||||
if (base <= 0x0001) // Only 128k BIOS on AtomisWave
|
||||
#endif
|
||||
// :MPX System/Boot ROM
|
||||
if (base <= (settings.platform.system == DC_PLATFORM_ATOMISWAVE ? 0x0001 : 0x001F)) // Only 128k BIOS on AtomisWave
|
||||
{
|
||||
WriteBios(addr,data,sz);
|
||||
}
|
||||
|
@ -285,11 +286,10 @@ void DYNACALL WriteMem_area0(u32 addr,T data)
|
|||
}
|
||||
else if ((addr>= 0x005F7000) && (addr<= 0x005F70FF)) // GD-ROM
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_NAOMI || DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
WriteMem_naomi(addr,data,sz);
|
||||
#else
|
||||
WriteMem_gdrom(addr,data,sz);
|
||||
#endif
|
||||
if (settings.platform.system != DC_PLATFORM_DREAMCAST)
|
||||
WriteMem_naomi(addr,data,sz);
|
||||
else
|
||||
WriteMem_gdrom(addr,data,sz);
|
||||
}
|
||||
else if ( likely((addr>= 0x005F6800) && (addr<=0x005F7CFF)) ) // /*:PVR i/f Control Reg.*/ -> ALL SB registers
|
||||
{
|
||||
|
@ -304,10 +304,11 @@ void DYNACALL WriteMem_area0(u32 addr,T data)
|
|||
//map 0x0060 to 0x0060
|
||||
else if ((base ==0x0060) /*&& (addr>= 0x00600000)*/ && (addr<= 0x006007FF)) // MODEM
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_NAOMI || DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
libExtDevice_WriteMem_A0_006(addr, data, sz);
|
||||
#elif defined(ENABLE_MODEM)
|
||||
ModemWriteMem_A0_006(addr, data, sz);
|
||||
if (settings.platform.system != DC_PLATFORM_DREAMCAST)
|
||||
libExtDevice_WriteMem_A0_006(addr, data, sz);
|
||||
#if defined(ENABLE_MODEM)
|
||||
else
|
||||
ModemWriteMem_A0_006(addr, data, sz);
|
||||
#endif
|
||||
}
|
||||
//map 0x0060 to 0x006F
|
||||
|
@ -347,17 +348,57 @@ void sh4_area0_Init()
|
|||
sb_Init();
|
||||
}
|
||||
|
||||
void sh4_area0_Reset(bool Manual)
|
||||
void sh4_area0_Reset(bool manual)
|
||||
{
|
||||
sb_Reset(Manual);
|
||||
sys_rom.Reset();
|
||||
#if defined(FLASH_SIZE) || defined(BBSRAM_SIZE)
|
||||
sys_nvmem.Reset();
|
||||
#endif
|
||||
if (manual)
|
||||
{
|
||||
if (sys_rom != NULL)
|
||||
{
|
||||
delete sys_rom;
|
||||
sys_rom = NULL;
|
||||
}
|
||||
if (sys_nvmem != NULL)
|
||||
{
|
||||
delete sys_nvmem;
|
||||
sys_nvmem = NULL;
|
||||
}
|
||||
|
||||
switch (settings.platform.system)
|
||||
{
|
||||
case DC_PLATFORM_DREAMCAST:
|
||||
sys_rom = new RomChip(settings.platform.bios_size);
|
||||
sys_nvmem = new DCFlashChip(settings.platform.flash_size);
|
||||
break;
|
||||
case DC_PLATFORM_NAOMI:
|
||||
sys_rom = new RomChip(settings.platform.bios_size);
|
||||
sys_nvmem = new SRamChip(settings.platform.bbsram_size);
|
||||
break;
|
||||
case DC_PLATFORM_ATOMISWAVE:
|
||||
sys_rom = new DCFlashChip(settings.platform.bios_size, settings.platform.bios_size / 2);
|
||||
sys_nvmem = new SRamChip(settings.platform.bbsram_size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sys_rom->Reset();
|
||||
sys_nvmem->Reset();
|
||||
}
|
||||
sb_Reset(manual);
|
||||
}
|
||||
|
||||
void sh4_area0_Term()
|
||||
{
|
||||
if (sys_rom != NULL)
|
||||
{
|
||||
delete sys_rom;
|
||||
sys_rom = NULL;
|
||||
}
|
||||
if (sys_nvmem != NULL)
|
||||
{
|
||||
delete sys_nvmem;
|
||||
sys_nvmem = NULL;
|
||||
}
|
||||
sb_Term();
|
||||
}
|
||||
|
||||
|
|
|
@ -77,33 +77,36 @@ struct MapleConfigMap : IMapleConfigMap
|
|||
UpdateInputState(player_num);
|
||||
|
||||
pjs->kcode=kcode[player_num];
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
pjs->kcode |= 0xF901; // mask off DPad2, C, D and Z
|
||||
pjs->joy[PJAI_X1]=GetBtFromSgn(joyx[player_num]);
|
||||
pjs->joy[PJAI_Y1]=GetBtFromSgn(joyy[player_num]);
|
||||
pjs->trigger[PJTI_R]=rt[player_num];
|
||||
pjs->trigger[PJTI_L]=lt[player_num];
|
||||
#elif DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
pjs->kcode = 0xFFFF;
|
||||
for (int i = 0; i < 16; i++)
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
{
|
||||
if ((kcode[player_num] & (1 << i)) == 0)
|
||||
pjs->kcode &= ~awave_button_mapping[i];
|
||||
pjs->kcode |= 0xF901; // mask off DPad2, C, D and Z
|
||||
pjs->joy[PJAI_X1]=GetBtFromSgn(joyx[player_num]);
|
||||
pjs->joy[PJAI_Y1]=GetBtFromSgn(joyy[player_num]);
|
||||
pjs->trigger[PJTI_R]=rt[player_num];
|
||||
pjs->trigger[PJTI_L]=lt[player_num];
|
||||
}
|
||||
pjs->joy[PJAI_X1] = GetBtFromSgn(joyx[player_num]);
|
||||
if (NaomiGameInputs != NULL && NaomiGameInputs->axes[1].name != NULL && NaomiGameInputs->axes[1].type == Half)
|
||||
else if (settings.platform.system == DC_PLATFORM_ATOMISWAVE)
|
||||
{
|
||||
// Driving games: put axis 2 on RT (accel) and axis 3 on LT (brake)
|
||||
pjs->joy[PJAI_Y1] = rt[player_num];
|
||||
pjs->joy[PJAI_X2] = lt[player_num];
|
||||
pjs->kcode = 0xFFFF;
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
if ((kcode[player_num] & (1 << i)) == 0)
|
||||
pjs->kcode &= ~awave_button_mapping[i];
|
||||
}
|
||||
pjs->joy[PJAI_X1] = GetBtFromSgn(joyx[player_num]);
|
||||
if (NaomiGameInputs != NULL && NaomiGameInputs->axes[1].name != NULL && NaomiGameInputs->axes[1].type == Half)
|
||||
{
|
||||
// Driving games: put axis 2 on RT (accel) and axis 3 on LT (brake)
|
||||
pjs->joy[PJAI_Y1] = rt[player_num];
|
||||
pjs->joy[PJAI_X2] = lt[player_num];
|
||||
}
|
||||
else
|
||||
{
|
||||
pjs->joy[PJAI_Y1] = GetBtFromSgn(joyy[player_num]);
|
||||
pjs->joy[PJAI_X2] = rt[player_num];
|
||||
pjs->joy[PJAI_Y2] = lt[player_num];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pjs->joy[PJAI_Y1] = GetBtFromSgn(joyy[player_num]);
|
||||
pjs->joy[PJAI_X2] = rt[player_num];
|
||||
pjs->joy[PJAI_Y2] = lt[player_num];
|
||||
}
|
||||
#endif
|
||||
}
|
||||
void SetImage(void* img)
|
||||
{
|
||||
|
@ -134,12 +137,16 @@ void mcfg_Create(MapleDeviceType type, u32 bus, u32 port, s32 player_num = -1)
|
|||
|
||||
void mcfg_CreateNAOMIJamma()
|
||||
{
|
||||
printf("mcfg_CreateNAOMIJamma\n");
|
||||
mcfg_DestroyDevices();
|
||||
mcfg_Create(MDT_NaomiJamma, 0, 5);
|
||||
// mcfg_Create(MDT_Keyboard, 2, 5);
|
||||
}
|
||||
|
||||
void mcfg_CreateAtomisWaveControllers()
|
||||
{
|
||||
printf("mcfg_CreateAtomisWaveControllers\n");
|
||||
mcfg_DestroyDevices();
|
||||
// Looks like two controllers needs to be on bus 0 and 1 for digital inputs
|
||||
// Then other devices on port 2 and 3 for analog axes, light guns, ...
|
||||
mcfg_Create(MDT_SegaController, 0, 5);
|
||||
|
@ -174,6 +181,7 @@ void mcfg_CreateAtomisWaveControllers()
|
|||
|
||||
void mcfg_CreateDevices()
|
||||
{
|
||||
printf("mcfg_CreateDevices\n");
|
||||
for (int bus = 0; bus < MAPLE_PORTS; ++bus)
|
||||
{
|
||||
switch ((MapleDeviceType)settings.input.maple_devices[bus])
|
||||
|
@ -205,6 +213,7 @@ void mcfg_CreateDevices()
|
|||
|
||||
void mcfg_DestroyDevices()
|
||||
{
|
||||
printf("mcfg_DestroyDevices\n");
|
||||
for (int i = 0; i < MAPLE_PORTS; i++)
|
||||
for (int j=0;j<=5;j++)
|
||||
{
|
||||
|
|
|
@ -58,12 +58,9 @@ struct IMapleConfigMap
|
|||
virtual ~IMapleConfigMap() {}
|
||||
};
|
||||
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
void mcfg_CreateDevices();
|
||||
#else
|
||||
void mcfg_CreateNAOMIJamma();
|
||||
void mcfg_CreateAtomisWaveControllers();
|
||||
#endif
|
||||
|
||||
void mcfg_DestroyDevices();
|
||||
void mcfg_SerializeDevices(void **data, unsigned int *total_size);
|
||||
|
|
|
@ -2619,11 +2619,10 @@ maple_device* maple_Create(MapleDeviceType type)
|
|||
switch(type)
|
||||
{
|
||||
case MDT_SegaController:
|
||||
#if DC_PLATFORM != DC_PLATFORM_ATOMISWAVE
|
||||
rv = new maple_sega_controller();
|
||||
#else
|
||||
rv = new maple_atomiswave_controller();
|
||||
#endif
|
||||
if (settings.platform.system != DC_PLATFORM_ATOMISWAVE)
|
||||
rv = new maple_sega_controller();
|
||||
else
|
||||
rv = new maple_atomiswave_controller();
|
||||
break;
|
||||
|
||||
case MDT_Microphone:
|
||||
|
@ -2647,11 +2646,10 @@ maple_device* maple_Create(MapleDeviceType type)
|
|||
break;
|
||||
|
||||
case MDT_LightGun:
|
||||
#if DC_PLATFORM != DC_PLATFORM_ATOMISWAVE
|
||||
rv = new maple_lightgun();
|
||||
#else
|
||||
rv = new atomiswave_lightgun();
|
||||
#endif
|
||||
if (settings.platform.system != DC_PLATFORM_ATOMISWAVE)
|
||||
rv = new maple_lightgun();
|
||||
else
|
||||
rv = new atomiswave_lightgun();
|
||||
break;
|
||||
|
||||
case MDT_NaomiJamma:
|
||||
|
|
|
@ -71,9 +71,8 @@ void maple_vblank()
|
|||
maple_ddt_pending_reset=false;
|
||||
}
|
||||
}
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
maple_handle_reconnect();
|
||||
#endif
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
maple_handle_reconnect();
|
||||
}
|
||||
void maple_SB_MSHTCL_Write(u32 addr, u32 data)
|
||||
{
|
||||
|
@ -277,7 +276,6 @@ void maple_Term()
|
|||
|
||||
}
|
||||
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
static u64 reconnect_time;
|
||||
|
||||
void maple_ReconnectDevices()
|
||||
|
@ -294,4 +292,3 @@ static void maple_handle_reconnect()
|
|||
mcfg_CreateDevices();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -441,6 +441,7 @@ void _vmem_term() {}
|
|||
|
||||
u8* virt_ram_base;
|
||||
bool vmem_4gb_space;
|
||||
static VMemType vmemstatus;
|
||||
|
||||
void* malloc_pages(size_t size) {
|
||||
#if HOST_OS == OS_WINDOWS
|
||||
|
@ -512,14 +513,49 @@ bool _vmem_reserve() {
|
|||
// TODO: Static assert?
|
||||
verify((sizeof(Sh4RCB)%PAGE_SIZE)==0);
|
||||
|
||||
VMemType vmemstatus = MemTypeError;
|
||||
vmemstatus = MemTypeError;
|
||||
|
||||
// Use vmem only if settings mandate so, and if we have proper exception handlers.
|
||||
#ifndef TARGET_NO_EXCEPTIONS
|
||||
#ifndef TARGET_NO_EXCEPTIONS
|
||||
if (!settings.dynarec.disable_nvmem)
|
||||
vmemstatus = vmem_platform_init((void**)&virt_ram_base, (void**)&p_sh4rcb);
|
||||
#endif
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
void _vmem_term_mappings()
|
||||
{
|
||||
if (vmemstatus == MemTypeError) {
|
||||
if (p_sh4rcb != NULL)
|
||||
{
|
||||
free(p_sh4rcb);
|
||||
p_sh4rcb = NULL;
|
||||
}
|
||||
if (mem_b.data != NULL)
|
||||
{
|
||||
free(mem_b.data);
|
||||
mem_b.data = NULL;
|
||||
}
|
||||
if (vram.data != NULL)
|
||||
{
|
||||
free(vram.data);
|
||||
vram.data = NULL;
|
||||
}
|
||||
if (aica_ram.data != NULL)
|
||||
{
|
||||
free(aica_ram.data);
|
||||
aica_ram.data = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//vmem_platform_destroy(); // FIXME Needed for Windows
|
||||
}
|
||||
}
|
||||
|
||||
void _vmem_init_mappings()
|
||||
{
|
||||
_vmem_term_mappings();
|
||||
// Fallback to statically allocated buffers, this results in slow-ops being generated.
|
||||
if (vmemstatus == MemTypeError) {
|
||||
WARN_LOG(VMEM, "Warning! nvmem is DISABLED (due to failure or not being built-in");
|
||||
|
@ -627,8 +663,6 @@ bool _vmem_reserve() {
|
|||
aica_ram.Zero();
|
||||
vram.Zero();
|
||||
mem_b.Zero();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#define freedefptr(x) \
|
||||
|
|
|
@ -55,6 +55,7 @@ typedef u32 _vmem_handler;
|
|||
void _vmem_init();
|
||||
void _vmem_reset();
|
||||
void _vmem_term();
|
||||
void _vmem_init_mappings();
|
||||
|
||||
//functions to register and map handlers/memory
|
||||
_vmem_handler _vmem_register_handler(_vmem_ReadMem8FP* read8,_vmem_ReadMem16FP* read16,_vmem_ReadMem32FP* read32, _vmem_WriteMem8FP* write8,_vmem_WriteMem16FP* write16,_vmem_WriteMem32FP* write32);
|
||||
|
|
|
@ -66,7 +66,7 @@ struct vram_lock {
|
|||
u32 start;
|
||||
u32 end;
|
||||
};
|
||||
static std::vector<vram_lock> vram_blocks[VRAM_SIZE / VRAM_PROT_SEGMENT];
|
||||
static std::vector<vram_lock> vram_blocks[VRAM_SIZE_MAX / VRAM_PROT_SEGMENT];
|
||||
static u8 sram_mapped_pages[USER_SPACE / PAGE_SIZE / 8]; // bit set to 1 if page is mapped
|
||||
|
||||
bool vmem32_inited;
|
||||
|
|
|
@ -534,10 +534,6 @@ void naomi_reg_Init()
|
|||
}
|
||||
#endif
|
||||
NaomiInit();
|
||||
|
||||
sb_rio_register(SB_GDST_addr, RIO_WF, 0, &Naomi_DmaStart);
|
||||
|
||||
sb_rio_register(SB_GDEN_addr, RIO_WF, 0, &Naomi_DmaEnable);
|
||||
}
|
||||
|
||||
void naomi_reg_Term()
|
||||
|
@ -555,6 +551,9 @@ void naomi_reg_Term()
|
|||
}
|
||||
void naomi_reg_Reset(bool Manual)
|
||||
{
|
||||
sb_rio_register(SB_GDST_addr, RIO_WF, 0, &Naomi_DmaStart);
|
||||
sb_rio_register(SB_GDEN_addr, RIO_WF, 0, &Naomi_DmaEnable);
|
||||
|
||||
NaomiDataRead = false;
|
||||
aw_ram_test_skipped = false;
|
||||
GSerialBuffer = 0;
|
||||
|
|
|
@ -55,7 +55,7 @@ char naomi_game_id[33];
|
|||
InputDescriptors *NaomiGameInputs;
|
||||
u8 *naomi_default_eeprom;
|
||||
|
||||
extern RomChip sys_rom;
|
||||
extern MemChip *sys_rom;
|
||||
|
||||
static bool naomi_LoadBios(const char *filename, Archive *child_archive, Archive *parent_archive, int region)
|
||||
{
|
||||
|
@ -94,7 +94,7 @@ static bool naomi_LoadBios(const char *filename, Archive *child_archive, Archive
|
|||
{
|
||||
verify(bios->blobs[romid].offset + bios->blobs[romid].length <= BIOS_SIZE);
|
||||
verify(bios->blobs[romid].src_offset + bios->blobs[romid].length <= BIOS_SIZE);
|
||||
memcpy(sys_rom.data + bios->blobs[romid].offset, sys_rom.data + bios->blobs[romid].src_offset, bios->blobs[romid].length);
|
||||
memcpy(sys_rom->data + bios->blobs[romid].offset, sys_rom->data + bios->blobs[romid].src_offset, bios->blobs[romid].length);
|
||||
DEBUG_LOG(NAOMI, "Copied: %x bytes from %07x to %07x", bios->blobs[romid].length, bios->blobs[romid].src_offset, bios->blobs[romid].offset);
|
||||
}
|
||||
else
|
||||
|
@ -113,7 +113,7 @@ static bool naomi_LoadBios(const char *filename, Archive *child_archive, Archive
|
|||
if (bios->blobs[romid].blob_type == Normal)
|
||||
{
|
||||
verify(bios->blobs[romid].offset + bios->blobs[romid].length <= BIOS_SIZE);
|
||||
u32 read = file->Read(sys_rom.data + bios->blobs[romid].offset, bios->blobs[romid].length);
|
||||
u32 read = file->Read(sys_rom->data + bios->blobs[romid].offset, bios->blobs[romid].length);
|
||||
DEBUG_LOG(NAOMI, "Mapped %s: %x bytes at %07x", bios->blobs[romid].filename, read, bios->blobs[romid].offset);
|
||||
}
|
||||
else if (bios->blobs[romid].blob_type == InterleavedWord)
|
||||
|
@ -127,7 +127,7 @@ static bool naomi_LoadBios(const char *filename, Archive *child_archive, Archive
|
|||
}
|
||||
verify(bios->blobs[romid].offset + bios->blobs[romid].length <= BIOS_SIZE);
|
||||
u32 read = file->Read(buf, bios->blobs[romid].length);
|
||||
u16 *to = (u16 *)(sys_rom.data + bios->blobs[romid].offset);
|
||||
u16 *to = (u16 *)(sys_rom->data + bios->blobs[romid].offset);
|
||||
u16 *from = (u16 *)buf;
|
||||
for (int i = bios->blobs[romid].length / 2; --i >= 0; to++)
|
||||
*to++ = *from++;
|
||||
|
@ -143,10 +143,9 @@ static bool naomi_LoadBios(const char *filename, Archive *child_archive, Archive
|
|||
if (bios_archive != NULL)
|
||||
delete bios_archive;
|
||||
|
||||
#if DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
// Reload the writeable portion of the FlashROM
|
||||
sys_rom.Reload();
|
||||
#endif
|
||||
if (settings.platform.system == DC_PLATFORM_ATOMISWAVE)
|
||||
// Reload the writeable portion of the FlashROM
|
||||
sys_rom->Reload();
|
||||
|
||||
return found_region;
|
||||
|
||||
|
@ -156,9 +155,9 @@ error:
|
|||
return false;
|
||||
}
|
||||
|
||||
static bool naomi_cart_LoadZip(char *filename)
|
||||
static Game *FindGame(const char *filename)
|
||||
{
|
||||
char *p = strrchr(filename, '/');
|
||||
const char *p = strrchr(filename, '/');
|
||||
#ifdef _WIN32
|
||||
p = strrchr(p == NULL ? filename : p, '\\');
|
||||
#endif
|
||||
|
@ -178,25 +177,19 @@ static bool naomi_cart_LoadZip(char *filename)
|
|||
if (!stricmp(Games[gameid].name, game_name))
|
||||
break;
|
||||
if (Games[gameid].name == NULL)
|
||||
return NULL;
|
||||
|
||||
return &Games[gameid];
|
||||
}
|
||||
|
||||
static bool naomi_cart_LoadZip(char *filename)
|
||||
{
|
||||
Game *game = FindGame(filename);
|
||||
if (game == NULL)
|
||||
{
|
||||
ERROR_LOG(NAOMI, "Unknown game %s", filename);
|
||||
return false;
|
||||
}
|
||||
|
||||
struct Game *game = &Games[gameid];
|
||||
#if DC_PLATFORM == DC_PLATFORM_NAOMI
|
||||
if (game->cart_type == AW)
|
||||
{
|
||||
msgboxf("Atomiswave cartridges are not supported by NAOMI", 0);
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
if (game->cart_type != AW)
|
||||
{
|
||||
msgboxf("NAOMI cartridges are not supported by Atomiswave", 0);
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
Archive *archive = OpenArchive(filename);
|
||||
if (archive != NULL)
|
||||
INFO_LOG(NAOMI, "Opened %s", filename);
|
||||
|
@ -650,6 +643,17 @@ bool naomi_cart_SelectFile()
|
|||
return true;
|
||||
}
|
||||
|
||||
int naomi_cart_GetPlatform(const char *path)
|
||||
{
|
||||
Game *game = FindGame(path);
|
||||
if (game == NULL)
|
||||
return DC_PLATFORM_NAOMI;
|
||||
else if (game->cart_type == AW)
|
||||
return DC_PLATFORM_ATOMISWAVE;
|
||||
else
|
||||
return DC_PLATFORM_NAOMI;
|
||||
}
|
||||
|
||||
Cartridge::Cartridge(u32 size)
|
||||
{
|
||||
RomPtr = (u8 *)malloc(size);
|
||||
|
|
|
@ -95,6 +95,7 @@ public:
|
|||
|
||||
bool naomi_cart_SelectFile();
|
||||
void naomi_cart_Close();
|
||||
int naomi_cart_GetPlatform(const char *path);
|
||||
|
||||
extern char naomi_game_id[];
|
||||
extern u8 *naomi_default_eeprom;
|
||||
|
|
|
@ -412,15 +412,18 @@ void bm_Reset()
|
|||
// Windows cannot lock/unlock a region spanning more than one VirtualAlloc or MapViewOfFile
|
||||
// so we have to unlock each region individually
|
||||
// No need for this mess in 4GB mode since windows doesn't use it
|
||||
#if RAM_SIZE == 16 * 1024 * 1024
|
||||
mem_region_unlock(virt_ram_base + 0x0C000000, RAM_SIZE);
|
||||
mem_region_unlock(virt_ram_base + 0x0D000000, RAM_SIZE);
|
||||
mem_region_unlock(virt_ram_base + 0x0E000000, RAM_SIZE);
|
||||
mem_region_unlock(virt_ram_base + 0x0F000000, RAM_SIZE);
|
||||
#else
|
||||
mem_region_unlock(virt_ram_base + 0x0C000000, RAM_SIZE);
|
||||
mem_region_unlock(virt_ram_base + 0x0E000000, RAM_SIZE);
|
||||
#endif
|
||||
if (settings.platform.ram_size == 16 * 1024 * 1024)
|
||||
{
|
||||
mem_region_unlock(virt_ram_base + 0x0C000000, RAM_SIZE);
|
||||
mem_region_unlock(virt_ram_base + 0x0D000000, RAM_SIZE);
|
||||
mem_region_unlock(virt_ram_base + 0x0E000000, RAM_SIZE);
|
||||
mem_region_unlock(virt_ram_base + 0x0F000000, RAM_SIZE);
|
||||
}
|
||||
else
|
||||
{
|
||||
mem_region_unlock(virt_ram_base + 0x0C000000, RAM_SIZE);
|
||||
mem_region_unlock(virt_ram_base + 0x0E000000, RAM_SIZE);
|
||||
}
|
||||
if (_nvmem_4gb_space())
|
||||
{
|
||||
mem_region_unlock(virt_ram_base + 0x8C000000, 0x90000000 - 0x8C000000);
|
||||
|
|
|
@ -11,11 +11,10 @@ BSC_PDTRA_type BSC_PDTRA;
|
|||
void write_BSC_PCTRA(u32 addr, u32 data)
|
||||
{
|
||||
BSC_PCTRA.full=(u16)data;
|
||||
#if DC_PLATFORM == DC_PLATFORM_NAOMI
|
||||
if (settings.platform.system == DC_PLATFORM_NAOMI)
|
||||
NaomiBoardIDWriteControl((u16)data);
|
||||
#else
|
||||
//else
|
||||
//printf("C:BSC_PCTRA = %08X\n",data);
|
||||
#endif
|
||||
}
|
||||
//u32 port_out_data;
|
||||
void write_BSC_PDTRA(u32 addr, u32 data)
|
||||
|
@ -23,19 +22,18 @@ void write_BSC_PDTRA(u32 addr, u32 data)
|
|||
BSC_PDTRA.full=(u16)data;
|
||||
//printf("D:BSC_PDTRA = %08X\n",data);
|
||||
|
||||
#if DC_PLATFORM == DC_PLATFORM_NAOMI
|
||||
if (settings.platform.system == DC_PLATFORM_NAOMI)
|
||||
NaomiBoardIDWrite((u16)data);
|
||||
#endif
|
||||
}
|
||||
|
||||
u32 read_BSC_PDTRA(u32 addr)
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_NAOMI
|
||||
|
||||
if (settings.platform.system == DC_PLATFORM_NAOMI)
|
||||
{
|
||||
return NaomiBoardIDRead();
|
||||
|
||||
#else
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
/* as seen on chankast */
|
||||
u32 tpctra = BSC_PCTRA.full;
|
||||
u32 tpdtra = BSC_PDTRA.full;
|
||||
|
@ -57,8 +55,7 @@ u32 read_BSC_PDTRA(u32 addr)
|
|||
tfinal |= settings.dreamcast.cable <<8;
|
||||
|
||||
return tfinal;
|
||||
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
//Init term res
|
||||
|
@ -113,14 +110,10 @@ void bsc_init()
|
|||
sh4_rio_reg(BSC,BSC_GPIOIC_addr,RIO_DATA,16);
|
||||
|
||||
//note: naomi//aw might depend on rfcr
|
||||
#if DC_PLATFORM == DC_PLATFORM_NAOMI || DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
sh4_rio_reg(BSC, BSC_RFCR_addr, RIO_RO, 16);
|
||||
BSC_RFCR.full = 17;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
void bsc_reset()
|
||||
{
|
||||
/*
|
||||
|
@ -160,10 +153,10 @@ void bsc_reset()
|
|||
BSC_PCTRB.full=0x0;
|
||||
//BSC_PDTRB.full; undef
|
||||
BSC_GPIOIC.full=0x0;
|
||||
#if DC_PLATFORM == DC_PLATFORM_NAOMI || DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
|
||||
BSC_RFCR.full = 17;
|
||||
#endif
|
||||
}
|
||||
|
||||
void bsc_term()
|
||||
{
|
||||
}
|
||||
|
|
|
@ -70,10 +70,8 @@ void libGDR_Reset(bool Manual)
|
|||
//called when entering sh4 thread , from the new thread context (for any thread specific init)
|
||||
s32 libGDR_Init()
|
||||
{
|
||||
if (!InitDrive())
|
||||
return rv_serror;
|
||||
libCore_gdrom_disc_change();
|
||||
settings.imgread.PatchRegion=true;
|
||||
settings.imgread.PatchRegion = true;
|
||||
return rv_ok;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include <sys/param.h>
|
||||
#include <sys/time.h>
|
||||
#include "hw/sh4/dyna/blockmanager.h"
|
||||
#include "hw/maple/maple_cfg.h"
|
||||
#include "log/LogManager.h"
|
||||
#include <unistd.h>
|
||||
|
||||
|
@ -107,10 +106,6 @@ void os_SetupInput()
|
|||
#if defined(USE_SDL)
|
||||
input_sdl_init();
|
||||
#endif
|
||||
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
mcfg_CreateDevices();
|
||||
#endif
|
||||
}
|
||||
|
||||
void UpdateInputState(u32 port)
|
||||
|
|
499
core/nullDC.cpp
499
core/nullDC.cpp
|
@ -132,175 +132,178 @@ void plugins_Reset(bool Manual)
|
|||
|
||||
void LoadSpecialSettings()
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
INFO_LOG(BOOT, "Game ID is [%s]", reios_product_number);
|
||||
rtt_to_buffer_game = false;
|
||||
safemode_game = false;
|
||||
tr_poly_depth_mask_game = false;
|
||||
extra_depth_game = false;
|
||||
full_mmu_game = false;
|
||||
disable_vmem32_game = false;
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
{
|
||||
INFO_LOG(BOOT, "Game ID is [%s]", reios_product_number);
|
||||
rtt_to_buffer_game = false;
|
||||
safemode_game = false;
|
||||
tr_poly_depth_mask_game = false;
|
||||
extra_depth_game = false;
|
||||
full_mmu_game = false;
|
||||
disable_vmem32_game = false;
|
||||
|
||||
if (reios_windows_ce || !strncmp("T26702N", reios_product_number, 7)) // PBA Tour Bowling 2001
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling Full MMU and Extra depth scaling for Windows CE game");
|
||||
settings.rend.ExtraDepthScale = 0.1;
|
||||
extra_depth_game = true;
|
||||
settings.dreamcast.FullMMU = true;
|
||||
full_mmu_game = true;
|
||||
settings.aica.NoBatch = true;
|
||||
}
|
||||
if (reios_windows_ce || !strncmp("T26702N", reios_product_number, 7)) // PBA Tour Bowling 2001
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling Full MMU and Extra depth scaling for Windows CE game");
|
||||
settings.rend.ExtraDepthScale = 0.1;
|
||||
extra_depth_game = true;
|
||||
settings.dreamcast.FullMMU = true;
|
||||
full_mmu_game = true;
|
||||
settings.aica.NoBatch = true;
|
||||
}
|
||||
|
||||
// Tony Hawk's Pro Skater 2
|
||||
if (!strncmp("T13008D", reios_product_number, 7) || !strncmp("T13006N", reios_product_number, 7)
|
||||
// Tony Hawk's Pro Skater 1
|
||||
|| !strncmp("T40205N", reios_product_number, 7)
|
||||
// Tony Hawk's Skateboarding
|
||||
|| !strncmp("T40204D", reios_product_number, 7)
|
||||
// Skies of Arcadia
|
||||
|| !strncmp("MK-51052", reios_product_number, 8)
|
||||
// Eternal Arcadia (JP)
|
||||
|| !strncmp("HDR-0076", reios_product_number, 8)
|
||||
// Flag to Flag (US)
|
||||
|| !strncmp("MK-51007", reios_product_number, 8)
|
||||
// Super Speed Racing (JP)
|
||||
|| !strncmp("HDR-0013", reios_product_number, 8)
|
||||
// Yu Suzuki Game Works Vol. 1
|
||||
|| !strncmp("6108099", reios_product_number, 7)
|
||||
// L.O.L
|
||||
|| !strncmp("T2106M", reios_product_number, 6)
|
||||
// Miss Moonlight
|
||||
|| !strncmp("T18702M", reios_product_number, 7)
|
||||
// Tom Clancy's Rainbow Six (US)
|
||||
|| !strncmp("T40401N", reios_product_number, 7)
|
||||
// Tom Clancy's Rainbow Six incl. Eagle Watch Missions (EU)
|
||||
|| !strncmp("T-45001D05", reios_product_number, 10))
|
||||
{
|
||||
settings.rend.RenderToTextureBuffer = 1;
|
||||
rtt_to_buffer_game = true;
|
||||
// Tony Hawk's Pro Skater 2
|
||||
if (!strncmp("T13008D", reios_product_number, 7) || !strncmp("T13006N", reios_product_number, 7)
|
||||
// Tony Hawk's Pro Skater 1
|
||||
|| !strncmp("T40205N", reios_product_number, 7)
|
||||
// Tony Hawk's Skateboarding
|
||||
|| !strncmp("T40204D", reios_product_number, 7)
|
||||
// Skies of Arcadia
|
||||
|| !strncmp("MK-51052", reios_product_number, 8)
|
||||
// Eternal Arcadia (JP)
|
||||
|| !strncmp("HDR-0076", reios_product_number, 8)
|
||||
// Flag to Flag (US)
|
||||
|| !strncmp("MK-51007", reios_product_number, 8)
|
||||
// Super Speed Racing (JP)
|
||||
|| !strncmp("HDR-0013", reios_product_number, 8)
|
||||
// Yu Suzuki Game Works Vol. 1
|
||||
|| !strncmp("6108099", reios_product_number, 7)
|
||||
// L.O.L
|
||||
|| !strncmp("T2106M", reios_product_number, 6)
|
||||
// Miss Moonlight
|
||||
|| !strncmp("T18702M", reios_product_number, 7)
|
||||
// Tom Clancy's Rainbow Six (US)
|
||||
|| !strncmp("T40401N", reios_product_number, 7)
|
||||
// Tom Clancy's Rainbow Six incl. Eagle Watch Missions (EU)
|
||||
|| !strncmp("T-45001D05", reios_product_number, 10))
|
||||
{
|
||||
settings.rend.RenderToTextureBuffer = 1;
|
||||
rtt_to_buffer_game = true;
|
||||
}
|
||||
if (!strncmp("HDR-0176", reios_product_number, 8) || !strncmp("RDC-0057", reios_product_number, 8))
|
||||
{
|
||||
// Cosmic Smash
|
||||
settings.rend.TranslucentPolygonDepthMask = 1;
|
||||
tr_poly_depth_mask_game = true;
|
||||
}
|
||||
// Demolition Racer
|
||||
if (!strncmp("T15112N", reios_product_number, 7)
|
||||
// Ducati World - Racing Challenge (NTSC)
|
||||
|| !strncmp("T-8113N", reios_product_number, 7)
|
||||
// Ducati World (PAL)
|
||||
|| !strncmp("T-8121D-50", reios_product_number, 10))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling Dynarec safe mode for game %s", reios_product_number);
|
||||
settings.dynarec.safemode = 1;
|
||||
safemode_game = true;
|
||||
}
|
||||
// NHL 2K2
|
||||
if (!strncmp("MK-51182", reios_product_number, 8))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling Extra depth scaling for game %s", reios_product_number);
|
||||
settings.rend.ExtraDepthScale = 10000;
|
||||
extra_depth_game = true;
|
||||
}
|
||||
// Re-Volt (US, EU)
|
||||
else if (!strncmp("T-8109N", reios_product_number, 7) || !strncmp("T8107D 50", reios_product_number, 10))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling Extra depth scaling for game %s", reios_product_number);
|
||||
settings.rend.ExtraDepthScale = 100;
|
||||
extra_depth_game = true;
|
||||
}
|
||||
// Super Producers
|
||||
if (!strncmp("T14303M", reios_product_number, 7)
|
||||
// Giant Killers
|
||||
|| !strncmp("T45401D 50", reios_product_number, 10)
|
||||
// Wild Metal (US)
|
||||
|| !strncmp("T42101N 00", reios_product_number, 10)
|
||||
// Wild Metal (EU)
|
||||
|| !strncmp("T40501D-50", reios_product_number, 10)
|
||||
// Resident Evil 2 (US)
|
||||
|| !strncmp("T1205N", reios_product_number, 6)
|
||||
// Resident Evil 2 (EU)
|
||||
|| !strncmp("T7004D 50", reios_product_number, 10)
|
||||
// Rune Jade
|
||||
|| !strncmp("T14304M", reios_product_number, 7)
|
||||
// Marionette Company
|
||||
|| !strncmp("T5202M", reios_product_number, 6)
|
||||
// Marionette Company 2
|
||||
|| !strncmp("T5203M", reios_product_number, 6)
|
||||
// Maximum Pool (for online support)
|
||||
|| !strncmp("T11010N", reios_product_number, 7)
|
||||
// StarLancer (US) (for online support)
|
||||
|| !strncmp("T40209N", reios_product_number, 7)
|
||||
// StarLancer (EU) (for online support)
|
||||
|| !strncmp("T17723D 05", reios_product_number, 10)
|
||||
)
|
||||
{
|
||||
INFO_LOG(BOOT, "Disabling 32-bit virtual memory for game %s", reios_product_number);
|
||||
settings.dynarec.disable_vmem32 = true;
|
||||
disable_vmem32_game = true;
|
||||
}
|
||||
}
|
||||
if (!strncmp("HDR-0176", reios_product_number, 8) || !strncmp("RDC-0057", reios_product_number, 8))
|
||||
else if (settings.platform.system == DC_PLATFORM_NAOMI || settings.platform.system == DC_PLATFORM_ATOMISWAVE)
|
||||
{
|
||||
// Cosmic Smash
|
||||
settings.rend.TranslucentPolygonDepthMask = 1;
|
||||
tr_poly_depth_mask_game = true;
|
||||
}
|
||||
// Demolition Racer
|
||||
if (!strncmp("T15112N", reios_product_number, 7)
|
||||
// Ducati World - Racing Challenge (NTSC)
|
||||
|| !strncmp("T-8113N", reios_product_number, 7)
|
||||
// Ducati World (PAL)
|
||||
|| !strncmp("T-8121D-50", reios_product_number, 10))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling Dynarec safe mode for game %s", reios_product_number);
|
||||
settings.dynarec.safemode = 1;
|
||||
safemode_game = true;
|
||||
}
|
||||
// NHL 2K2
|
||||
if (!strncmp("MK-51182", reios_product_number, 8))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling Extra depth scaling for game %s", reios_product_number);
|
||||
settings.rend.ExtraDepthScale = 10000;
|
||||
extra_depth_game = true;
|
||||
}
|
||||
// Re-Volt (US, EU)
|
||||
else if (!strncmp("T-8109N", reios_product_number, 7) || !strncmp("T8107D 50", reios_product_number, 10))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling Extra depth scaling for game %s", reios_product_number);
|
||||
settings.rend.ExtraDepthScale = 100;
|
||||
extra_depth_game = true;
|
||||
}
|
||||
// Super Producers
|
||||
if (!strncmp("T14303M", reios_product_number, 7)
|
||||
// Giant Killers
|
||||
|| !strncmp("T45401D 50", reios_product_number, 10)
|
||||
// Wild Metal (US)
|
||||
|| !strncmp("T42101N 00", reios_product_number, 10)
|
||||
// Wild Metal (EU)
|
||||
|| !strncmp("T40501D-50", reios_product_number, 10)
|
||||
// Resident Evil 2 (US)
|
||||
|| !strncmp("T1205N", reios_product_number, 6)
|
||||
// Resident Evil 2 (EU)
|
||||
|| !strncmp("T7004D 50", reios_product_number, 10)
|
||||
// Rune Jade
|
||||
|| !strncmp("T14304M", reios_product_number, 7)
|
||||
// Marionette Company
|
||||
|| !strncmp("T5202M", reios_product_number, 6)
|
||||
// Marionette Company 2
|
||||
|| !strncmp("T5203M", reios_product_number, 6)
|
||||
// Maximum Pool (for online support)
|
||||
|| !strncmp("T11010N", reios_product_number, 7)
|
||||
// StarLancer (US) (for online support)
|
||||
|| !strncmp("T40209N", reios_product_number, 7)
|
||||
// StarLancer (EU) (for online support)
|
||||
|| !strncmp("T17723D 05", reios_product_number, 10)
|
||||
)
|
||||
{
|
||||
INFO_LOG(BOOT, "Disabling 32-bit virtual memory for game %s", reios_product_number);
|
||||
settings.dynarec.disable_vmem32 = true;
|
||||
disable_vmem32_game = true;
|
||||
}
|
||||
#elif DC_PLATFORM == DC_PLATFORM_NAOMI || DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
INFO_LOG(BOOT, "Game ID is [%s]", naomi_game_id);
|
||||
INFO_LOG(BOOT, "Game ID is [%s]", naomi_game_id);
|
||||
|
||||
if (!strcmp("METAL SLUG 6", naomi_game_id) || !strcmp("WAVE RUNNER GP", naomi_game_id))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling Dynarec safe mode for game %s", naomi_game_id);
|
||||
settings.dynarec.safemode = 1;
|
||||
safemode_game = true;
|
||||
if (!strcmp("METAL SLUG 6", naomi_game_id) || !strcmp("WAVE RUNNER GP", naomi_game_id))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling Dynarec safe mode for game %s", naomi_game_id);
|
||||
settings.dynarec.safemode = 1;
|
||||
safemode_game = true;
|
||||
}
|
||||
if (!strcmp("SAMURAI SPIRITS 6", naomi_game_id))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling Extra depth scaling for game %s", naomi_game_id);
|
||||
settings.rend.ExtraDepthScale = 1e26;
|
||||
extra_depth_game = true;
|
||||
}
|
||||
if (!strcmp("DYNAMIC GOLF", naomi_game_id)
|
||||
|| !strcmp("SHOOTOUT POOL", naomi_game_id)
|
||||
|| !strcmp("OUTTRIGGER JAPAN", naomi_game_id)
|
||||
|| !strcmp("CRACKIN'DJ ver JAPAN", naomi_game_id)
|
||||
|| !strcmp("CRACKIN'DJ PART2 ver JAPAN", naomi_game_id)
|
||||
|| !strcmp("KICK '4' CASH", naomi_game_id))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling JVS rotary encoders for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = 2;
|
||||
}
|
||||
else if (!strcmp("POWER STONE 2 JAPAN", naomi_game_id) // Naomi
|
||||
|| !strcmp("GUILTY GEAR isuka", naomi_game_id)) // AW
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling 4-player setup for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = 1;
|
||||
}
|
||||
else if (!strcmp("SEGA MARINE FISHING JAPAN", naomi_game_id)
|
||||
|| !strcmp(naomi_game_id, "BASS FISHING SIMULATOR VER.A")) // AW
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling specific JVS setup for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = 3;
|
||||
}
|
||||
else if (!strcmp("RINGOUT 4X4 JAPAN", naomi_game_id))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling specific JVS setup for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = 4;
|
||||
}
|
||||
else if (!strcmp("NINJA ASSAULT", naomi_game_id)
|
||||
|| !strcmp(naomi_game_id, "Sports Shooting USA") // AW
|
||||
|| !strcmp(naomi_game_id, "SEGA CLAY CHALLENGE")) // AW
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling lightgun setup for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = 5;
|
||||
}
|
||||
else if (!strcmp(" BIOHAZARD GUN SURVIVOR2", naomi_game_id))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling specific JVS setup for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = 7;
|
||||
}
|
||||
if (!strcmp("COSMIC SMASH IN JAPAN", naomi_game_id))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling translucent depth multipass for game %s", naomi_game_id);
|
||||
settings.rend.TranslucentPolygonDepthMask = true;
|
||||
tr_poly_depth_mask_game = true;
|
||||
}
|
||||
}
|
||||
if (!strcmp("SAMURAI SPIRITS 6", naomi_game_id))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling Extra depth scaling for game %s", naomi_game_id);
|
||||
settings.rend.ExtraDepthScale = 1e26;
|
||||
extra_depth_game = true;
|
||||
}
|
||||
if (!strcmp("DYNAMIC GOLF", naomi_game_id)
|
||||
|| !strcmp("SHOOTOUT POOL", naomi_game_id)
|
||||
|| !strcmp("OUTTRIGGER JAPAN", naomi_game_id)
|
||||
|| !strcmp("CRACKIN'DJ ver JAPAN", naomi_game_id)
|
||||
|| !strcmp("CRACKIN'DJ PART2 ver JAPAN", naomi_game_id)
|
||||
|| !strcmp("KICK '4' CASH", naomi_game_id))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling JVS rotary encoders for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = 2;
|
||||
}
|
||||
else if (!strcmp("POWER STONE 2 JAPAN", naomi_game_id) // Naomi
|
||||
|| !strcmp("GUILTY GEAR isuka", naomi_game_id)) // AW
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling 4-player setup for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = 1;
|
||||
}
|
||||
else if (!strcmp("SEGA MARINE FISHING JAPAN", naomi_game_id)
|
||||
|| !strcmp(naomi_game_id, "BASS FISHING SIMULATOR VER.A")) // AW
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling specific JVS setup for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = 3;
|
||||
}
|
||||
else if (!strcmp("RINGOUT 4X4 JAPAN", naomi_game_id))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling specific JVS setup for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = 4;
|
||||
}
|
||||
else if (!strcmp("NINJA ASSAULT", naomi_game_id)
|
||||
|| !strcmp(naomi_game_id, "Sports Shooting USA") // AW
|
||||
|| !strcmp(naomi_game_id, "SEGA CLAY CHALLENGE")) // AW
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling lightgun setup for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = 5;
|
||||
}
|
||||
else if (!strcmp(" BIOHAZARD GUN SURVIVOR2", naomi_game_id))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling specific JVS setup for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = 7;
|
||||
}
|
||||
if (!strcmp("COSMIC SMASH IN JAPAN", naomi_game_id))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling translucent depth multipass for game %s", naomi_game_id);
|
||||
settings.rend.TranslucentPolygonDepthMask = true;
|
||||
tr_poly_depth_mask_game = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void dc_reset(bool manual)
|
||||
|
@ -358,12 +361,58 @@ int reicast_init(int argc, char* argv[])
|
|||
#define DATA_PATH "/"
|
||||
#endif
|
||||
|
||||
void set_platform(int platform)
|
||||
{
|
||||
switch (platform)
|
||||
{
|
||||
case DC_PLATFORM_DREAMCAST:
|
||||
printf("Starting Dreamcast game\n");
|
||||
settings.platform.ram_size = 16 * 1024 * 1024;
|
||||
settings.platform.vram_size = 8 * 1024 * 1024;
|
||||
settings.platform.aram_size = 2 * 1024 * 1024;
|
||||
settings.platform.bios_size = 2 * 1024 * 1024;
|
||||
settings.platform.flash_size = 128 * 1024;
|
||||
settings.platform.bbsram_size = 0;
|
||||
break;
|
||||
case DC_PLATFORM_NAOMI:
|
||||
printf("Starting Naomi game\n");
|
||||
settings.platform.ram_size = 32 * 1024 * 1024;
|
||||
settings.platform.vram_size = 16 * 1024 * 1024;
|
||||
settings.platform.aram_size = 8 * 1024 * 1024;
|
||||
settings.platform.bios_size = 2 * 1024 * 1024;
|
||||
settings.platform.flash_size = 0;
|
||||
settings.platform.bbsram_size = 32 * 1024;
|
||||
break;
|
||||
case DC_PLATFORM_ATOMISWAVE:
|
||||
printf("Starting Atomiswave game\n");
|
||||
settings.platform.ram_size = 16 * 1024 * 1024;
|
||||
settings.platform.vram_size = 8 * 1024 * 1024;
|
||||
settings.platform.aram_size = 8 * 1024 * 1024;
|
||||
settings.platform.bios_size = 128 * 1024;
|
||||
settings.platform.flash_size = 0;
|
||||
settings.platform.bbsram_size = 128 * 1024;
|
||||
break;
|
||||
default:
|
||||
die("Unsupported platform");
|
||||
break;
|
||||
}
|
||||
settings.platform.system = platform;
|
||||
settings.platform.ram_mask = settings.platform.ram_size - 1;
|
||||
settings.platform.vram_mask = settings.platform.vram_size - 1;
|
||||
settings.platform.aram_mask = settings.platform.aram_size - 1;
|
||||
_vmem_init_mappings();
|
||||
}
|
||||
|
||||
static int dc_init()
|
||||
{
|
||||
static bool init_done;
|
||||
|
||||
if (init_done)
|
||||
return 0;
|
||||
|
||||
// Default platform
|
||||
set_platform(DC_PLATFORM_DREAMCAST);
|
||||
|
||||
if (plugins_Init())
|
||||
return -3;
|
||||
#if FEAT_SHREC != DYNAREC_NONE
|
||||
|
@ -382,7 +431,6 @@ static int dc_init()
|
|||
}
|
||||
|
||||
mem_Init();
|
||||
mem_map_default(); // TODO needs to be called again if changing platform
|
||||
|
||||
init_done = true;
|
||||
|
||||
|
@ -391,6 +439,23 @@ static int dc_init()
|
|||
|
||||
bool game_started;
|
||||
|
||||
static int get_game_platform(const char *path)
|
||||
{
|
||||
if (path == NULL)
|
||||
// Dreamcast BIOS
|
||||
return DC_PLATFORM_DREAMCAST;
|
||||
|
||||
const char *dot = strrchr(path, '.');
|
||||
if (dot == NULL)
|
||||
return DC_PLATFORM_DREAMCAST; // unknown
|
||||
if (!stricmp(dot, ".zip") || !stricmp(dot, ".7z"))
|
||||
return naomi_cart_GetPlatform(path);
|
||||
if (!stricmp(dot, ".bin") || !stricmp(dot, ".dat"))
|
||||
return DC_PLATFORM_NAOMI;
|
||||
|
||||
return DC_PLATFORM_DREAMCAST;
|
||||
}
|
||||
|
||||
int dc_start_game(const char *path)
|
||||
{
|
||||
if (path != NULL)
|
||||
|
@ -400,57 +465,64 @@ int dc_start_game(const char *path)
|
|||
if (rc != 0)
|
||||
return rc;
|
||||
|
||||
set_platform(get_game_platform(path));
|
||||
mem_map_default();
|
||||
|
||||
InitSettings();
|
||||
dc_reset(true);
|
||||
LoadSettings(false);
|
||||
if (!LoadRomFiles(get_readonly_data_path(DATA_PATH)))
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
#ifdef USE_REIOS
|
||||
if (settings.bios.UseReios)
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
{
|
||||
if (!LoadHle(get_readonly_data_path(DATA_PATH)))
|
||||
#ifdef USE_REIOS
|
||||
if (settings.bios.UseReios)
|
||||
{
|
||||
ERROR_LOG(BOOT, "Cannot init HLE BIOS");
|
||||
return -5;
|
||||
if (!LoadHle(get_readonly_data_path(DATA_PATH)))
|
||||
{
|
||||
ERROR_LOG(BOOT, "Cannot init HLE BIOS");
|
||||
return -5;
|
||||
}
|
||||
else
|
||||
{
|
||||
NOTICE_LOG(BOOT, "Did not load bios, using reios");
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
NOTICE_LOG(BOOT, "Did not load bios, using reios");
|
||||
ERROR_LOG(BOOT, "Cannot find BIOS files");
|
||||
return -5;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
}
|
||||
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
{
|
||||
mcfg_CreateDevices();
|
||||
|
||||
if (path == NULL)
|
||||
{
|
||||
ERROR_LOG(BOOT, "Cannot find BIOS files");
|
||||
return -5;
|
||||
// Boot BIOS
|
||||
TermDrive();
|
||||
InitDrive();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DiscSwap())
|
||||
LoadCustom();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
if (path == NULL)
|
||||
else if (settings.platform.system == DC_PLATFORM_NAOMI || settings.platform.system == DC_PLATFORM_ATOMISWAVE)
|
||||
{
|
||||
// Boot BIOS
|
||||
TermDrive();
|
||||
InitDrive();
|
||||
if (!naomi_cart_SelectFile())
|
||||
return -6;
|
||||
LoadCustom();
|
||||
if (settings.platform.system == DC_PLATFORM_NAOMI)
|
||||
mcfg_CreateNAOMIJamma();
|
||||
else if (settings.platform.system == DC_PLATFORM_ATOMISWAVE)
|
||||
mcfg_CreateAtomisWaveControllers();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DiscSwap())
|
||||
LoadCustom();
|
||||
}
|
||||
#elif DC_PLATFORM == DC_PLATFORM_NAOMI || DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
if (!naomi_cart_SelectFile())
|
||||
return -6;
|
||||
LoadCustom();
|
||||
#if DC_PLATFORM == DC_PLATFORM_NAOMI
|
||||
mcfg_CreateNAOMIJamma();
|
||||
#elif DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
mcfg_CreateAtomisWaveControllers();
|
||||
#endif
|
||||
#endif
|
||||
|
||||
game_started = true;
|
||||
dc_resume();
|
||||
|
||||
|
@ -502,9 +574,8 @@ void* dc_run(void*)
|
|||
void dc_term()
|
||||
{
|
||||
sh4_cpu.Term();
|
||||
#if DC_PLATFORM != DC_PLATFORM_DREAMCAST
|
||||
naomi_cart_Close();
|
||||
#endif
|
||||
if (settings.platform.system != DC_PLATFORM_DREAMCAST)
|
||||
naomi_cart_Close();
|
||||
plugins_Term();
|
||||
mem_Term();
|
||||
_vmem_release();
|
||||
|
@ -736,18 +807,22 @@ void LoadSettings(bool game_specific)
|
|||
|
||||
void LoadCustom()
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
char *reios_id = reios_disk_id();
|
||||
char *reios_id;
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
{
|
||||
reios_id = reios_disk_id();
|
||||
|
||||
char *p = reios_id + strlen(reios_id) - 1;
|
||||
while (p >= reios_id && *p == ' ')
|
||||
*p-- = '\0';
|
||||
if (*p == '\0')
|
||||
return;
|
||||
#elif DC_PLATFORM == DC_PLATFORM_NAOMI || DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
char *reios_id = naomi_game_id;
|
||||
char *reios_software_name = naomi_game_id;
|
||||
#endif
|
||||
char *p = reios_id + strlen(reios_id) - 1;
|
||||
while (p >= reios_id && *p == ' ')
|
||||
*p-- = '\0';
|
||||
if (*p == '\0')
|
||||
return;
|
||||
}
|
||||
else if (settings.platform.system == DC_PLATFORM_NAOMI || settings.platform.system == DC_PLATFORM_ATOMISWAVE)
|
||||
{
|
||||
reios_id = naomi_game_id;
|
||||
char *reios_software_name = naomi_game_id;
|
||||
}
|
||||
|
||||
// Default per-game settings
|
||||
LoadSpecialSettings();
|
||||
|
|
|
@ -598,13 +598,13 @@ void reios_boot() {
|
|||
reios_setup_state(0x8C010000);
|
||||
}
|
||||
else {
|
||||
if (DC_PLATFORM == DC_PLATFORM_DREAMCAST) {
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST) {
|
||||
if (!bootfile_inited)
|
||||
msgboxf("Failed to locate bootfile", MBX_ICONERROR);
|
||||
reios_setup_state(0xac008300);
|
||||
}
|
||||
else {
|
||||
verify(DC_PLATFORM == DC_PLATFORM_NAOMI);
|
||||
verify(settings.platform.system == DC_PLATFORM_NAOMI);
|
||||
if (CurrentCartridge == NULL)
|
||||
{
|
||||
WARN_LOG(REIOS, "No cartridge loaded");
|
||||
|
|
|
@ -125,7 +125,7 @@ void palette_update()
|
|||
|
||||
using namespace std;
|
||||
|
||||
vector<vram_block*> VramLocks[VRAM_SIZE/PAGE_SIZE];
|
||||
vector<vram_block*> VramLocks[VRAM_SIZE_MAX / PAGE_SIZE];
|
||||
VLockedMemory vram; // vram 32-64b
|
||||
|
||||
//List functions
|
||||
|
|
|
@ -653,10 +653,11 @@ static void gui_display_settings()
|
|||
if (maple_devices_changed)
|
||||
{
|
||||
maple_devices_changed = false;
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
maple_ReconnectDevices();
|
||||
reset_vmus();
|
||||
#endif
|
||||
if (game_started && settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
{
|
||||
maple_ReconnectDevices();
|
||||
reset_vmus();
|
||||
}
|
||||
}
|
||||
SaveSettings();
|
||||
}
|
||||
|
@ -811,14 +812,12 @@ static void gui_display_settings()
|
|||
if (ImGui::BeginTabItem("Controls"))
|
||||
{
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, normal_padding);
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST || DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
if (ImGui::CollapsingHeader("Dreamcast Devices", ImGuiTreeNodeFlags_DefaultOpen))
|
||||
{
|
||||
for (int bus = 0; bus < MAPLE_PORTS; bus++)
|
||||
{
|
||||
ImGui::Text("Device %c", bus + 'A');
|
||||
ImGui::SameLine();
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
char device_name[32];
|
||||
sprintf(device_name, "##device%d", bus);
|
||||
float w = ImGui::CalcItemWidth() / 3;
|
||||
|
@ -862,14 +861,9 @@ static void gui_display_settings()
|
|||
ImGui::PopID();
|
||||
}
|
||||
ImGui::PopItemWidth();
|
||||
#elif DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
if (MapleDevices[bus][5] != NULL)
|
||||
ImGui::Text("%s", maple_device_name(MapleDevices[bus][5]->get_device_type()));
|
||||
#endif
|
||||
}
|
||||
ImGui::Spacing();
|
||||
}
|
||||
#endif
|
||||
if (ImGui::CollapsingHeader("Physical Devices", ImGuiTreeNodeFlags_DefaultOpen))
|
||||
{
|
||||
ImGui::Columns(4, "renderers", false);
|
||||
|
@ -1253,15 +1247,14 @@ static void gui_display_settings()
|
|||
ImGui::Text("Git Hash: %s", GIT_HASH);
|
||||
ImGui::Text("Build Date: %s", BUILD_DATE);
|
||||
ImGui::Text("Target: %s",
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
settings.platform.system == DC_PLATFORM_DREAMCAST ?
|
||||
"Dreamcast"
|
||||
#elif DC_PLATFORM == DC_PLATFORM_NAOMI
|
||||
: settings.platform.system == DC_PLATFORM_NAOMI ?
|
||||
"Naomi"
|
||||
#elif DC_PLATFORM == DC_PLATFORM_ATOMISWAVE
|
||||
: settings.platform.system == DC_PLATFORM_ATOMISWAVE ?
|
||||
"Atomiswave"
|
||||
#else
|
||||
:
|
||||
"Unknown"
|
||||
#endif
|
||||
);
|
||||
}
|
||||
if (ImGui::CollapsingHeader("Platform", ImGuiTreeNodeFlags_DefaultOpen))
|
||||
|
@ -1379,25 +1372,17 @@ static void add_game_directory(const std::string& path, std::vector<GameMedia>&
|
|||
}
|
||||
else
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
if (name.size() >= 4)
|
||||
{
|
||||
std::string extension = name.substr(name.size() - 4).c_str();
|
||||
//printf(" found game %s ext %s\n", entry->d_name, extension.c_str());
|
||||
if (stricmp(extension.c_str(), ".cdi") && stricmp(extension.c_str(), ".gdi") && stricmp(extension.c_str(), ".chd") && stricmp(extension.c_str(), ".cue"))
|
||||
continue;
|
||||
game_list.push_back({ name, child_path });
|
||||
}
|
||||
#else
|
||||
std::string::size_type dotpos = name.find_last_of(".");
|
||||
if (dotpos == std::string::npos || dotpos == name.size() - 1)
|
||||
continue;
|
||||
std::string extension = name.substr(dotpos);
|
||||
if (stricmp(extension.c_str(), ".zip") && stricmp(extension.c_str(), ".7z") && stricmp(extension.c_str(), ".bin")
|
||||
&& stricmp(extension.c_str(), ".lst") && stricmp(extension.c_str(), ".dat"))
|
||||
if (stricmp(extension.c_str(), ".zip") && stricmp(extension.c_str(), ".7z")
|
||||
&& stricmp(extension.c_str(), ".bin") && stricmp(extension.c_str(), ".lst")
|
||||
&& stricmp(extension.c_str(), ".dat")
|
||||
&& stricmp(extension.c_str(), ".cdi") && stricmp(extension.c_str(), ".gdi")
|
||||
&& stricmp(extension.c_str(), ".chd") && stricmp(extension.c_str(), ".cue"))
|
||||
continue;
|
||||
game_list.push_back({ name, child_path });
|
||||
#endif
|
||||
}
|
||||
}
|
||||
closedir(dir);
|
||||
|
@ -1484,7 +1469,6 @@ static void gui_display_content()
|
|||
{
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(8 * scaling, 20 * scaling)); // from 8, 4
|
||||
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
ImGui::PushID("bios");
|
||||
if (ImGui::Selectable("Dreamcast BIOS"))
|
||||
{
|
||||
|
@ -1493,7 +1477,6 @@ static void gui_display_content()
|
|||
gui_start_game("");
|
||||
}
|
||||
ImGui::PopID();
|
||||
#endif
|
||||
|
||||
for (auto& game : game_list)
|
||||
if (filter.PassFilter(game.name.c_str()))
|
||||
|
|
|
@ -157,19 +157,8 @@ extern u32 SB_FFST;
|
|||
//static HollyInterruptID dmatmp2;
|
||||
//static HollyInterruptID OldDmaId;
|
||||
|
||||
//this is one-time init, no updates - don't need to serialize
|
||||
//extern RomChip sys_rom;
|
||||
#ifdef FLASH_SIZE
|
||||
extern DCFlashChip sys_nvmem;
|
||||
#endif
|
||||
|
||||
#ifdef BBSRAM_SIZE
|
||||
extern SRamChip sys_nvmem;
|
||||
#endif
|
||||
//this is one-time init, no updates - don't need to serialize
|
||||
//extern _vmem_handler area0_handler;
|
||||
|
||||
|
||||
extern MemChip *sys_rom;
|
||||
extern MemChip *sys_nvmem;
|
||||
|
||||
|
||||
//./core/hw/gdrom/gdrom_response.o
|
||||
|
@ -831,20 +820,16 @@ bool dc_serialize(void **data, unsigned int *total_size)
|
|||
REICAST_S(SB_FFST);
|
||||
|
||||
|
||||
|
||||
//this is one-time init, no updates - don't need to serialize
|
||||
//extern RomChip sys_rom;
|
||||
REICAST_S(sys_nvmem.size);
|
||||
REICAST_S(sys_nvmem.mask);
|
||||
sys_rom->Serialize(data, total_size);
|
||||
sys_nvmem->Serialize(data, total_size);
|
||||
/*
|
||||
REICAST_S(sys_nvmem->size);
|
||||
REICAST_S(sys_nvmem->mask);
|
||||
#ifdef FLASH_SIZE
|
||||
REICAST_S(sys_nvmem.state);
|
||||
REICAST_S(sys_nvmem->state);
|
||||
#endif
|
||||
REICAST_SA(sys_nvmem.data,sys_nvmem.size);
|
||||
|
||||
//this is one-time init, no updates - don't need to serialize
|
||||
//extern _vmem_handler area0_handler;
|
||||
|
||||
|
||||
REICAST_SA(sys_nvmem->data, sys_nvmem->size);
|
||||
*/
|
||||
|
||||
|
||||
REICAST_SA(reply_11,16) ;
|
||||
|
@ -1198,15 +1183,14 @@ static bool dc_unserialize_libretro(void **data, unsigned int *total_size)
|
|||
REICAST_US(i); //LIBRETRO_S(sys_nvmem_sram.mask);
|
||||
//LIBRETRO_SA(sys_nvmem_sram.data,sys_nvmem_sram.size);
|
||||
|
||||
REICAST_US(sys_nvmem.size);
|
||||
REICAST_US(sys_nvmem.mask);
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
REICAST_US(sys_nvmem.state);
|
||||
#else
|
||||
// FIXME
|
||||
die("Naomi/Atomiswave libretro savestates are not supported");
|
||||
#endif
|
||||
REICAST_USA(sys_nvmem.data,sys_nvmem.size);
|
||||
REICAST_US(sys_nvmem->size);
|
||||
REICAST_US(sys_nvmem->mask);
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
REICAST_US(static_cast<DCFlashChip*>(sys_nvmem)->state);
|
||||
else
|
||||
// FIXME
|
||||
die("Naomi/Atomiswave libretro savestates are not supported");
|
||||
REICAST_USA(sys_nvmem->data, sys_nvmem->size);
|
||||
|
||||
|
||||
//this is one-time init, no updates - don't need to serialize
|
||||
|
@ -1580,15 +1564,16 @@ bool dc_unserialize(void **data, unsigned int *total_size)
|
|||
REICAST_US(SB_FFST_rc);
|
||||
REICAST_US(SB_FFST);
|
||||
|
||||
//this is one-time init, no updates - don't need to serialize
|
||||
//extern RomChip sys_rom;
|
||||
sys_rom->Unserialize(data, total_size);
|
||||
sys_nvmem->Unserialize(data, total_size);
|
||||
/*
|
||||
REICAST_US(sys_nvmem.size);
|
||||
REICAST_US(sys_nvmem.mask);
|
||||
#ifdef FLASH_SIZE
|
||||
REICAST_US(sys_nvmem.state);
|
||||
#endif
|
||||
REICAST_USA(sys_nvmem.data,sys_nvmem.size);
|
||||
|
||||
*/
|
||||
|
||||
//this is one-time init, no updates - don't need to serialize
|
||||
//extern _vmem_handler area0_handler;
|
||||
|
|
27
core/types.h
27
core/types.h
|
@ -421,8 +421,8 @@ bool dc_unserialize(void **data, unsigned int *total_size);
|
|||
#define REICAST_S(v) rc_serialize(&(v), sizeof(v), data, total_size)
|
||||
#define REICAST_US(v) rc_unserialize(&(v), sizeof(v), data, total_size)
|
||||
|
||||
#define REICAST_SA(v_arr,num) rc_serialize(v_arr, sizeof(v_arr[0])*num, data, total_size)
|
||||
#define REICAST_USA(v_arr,num) rc_unserialize(v_arr, sizeof(v_arr[0])*num, data, total_size)
|
||||
#define REICAST_SA(v_arr,num) rc_serialize((v_arr), sizeof((v_arr)[0])*(num), data, total_size)
|
||||
#define REICAST_USA(v_arr,num) rc_unserialize((v_arr), sizeof((v_arr)[0])*(num), data, total_size)
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -605,6 +605,19 @@ enum LimitFPSEnum {
|
|||
|
||||
struct settings_t
|
||||
{
|
||||
struct {
|
||||
int system;
|
||||
u32 ram_size;
|
||||
u32 ram_mask;
|
||||
u32 vram_size;
|
||||
u32 vram_mask;
|
||||
u32 aram_size;
|
||||
u32 aram_mask;
|
||||
u32 bios_size;
|
||||
u32 flash_size;
|
||||
u32 bbsram_size;
|
||||
} platform;
|
||||
|
||||
struct {
|
||||
bool UseReios;
|
||||
} bios;
|
||||
|
@ -738,6 +751,16 @@ struct settings_t
|
|||
|
||||
extern settings_t settings;
|
||||
|
||||
#define RAM_SIZE settings.platform.ram_size
|
||||
#define RAM_MASK settings.platform.ram_mask
|
||||
#define ARAM_SIZE settings.platform.aram_size
|
||||
#define ARAM_MASK settings.platform.aram_mask
|
||||
#define VRAM_SIZE settings.platform.vram_size
|
||||
#define VRAM_MASK settings.platform.vram_mask
|
||||
#define BIOS_SIZE settings.platform.bios_size
|
||||
#define FLASH_SIZE settings.platform.flash_size
|
||||
#define BBSRAM_SIZE settings.platform.bbsram_size
|
||||
|
||||
void InitSettings();
|
||||
void LoadSettings(bool game_specific);
|
||||
void SaveSettings();
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
#include <windowsx.h>
|
||||
|
||||
#include <xinput.h>
|
||||
#include "hw/maple/maple_cfg.h"
|
||||
#pragma comment(lib, "XInput9_1_0.lib")
|
||||
|
||||
PCHAR*
|
||||
|
@ -122,9 +121,6 @@ static std::shared_ptr<WinMouseGamepadDevice> mouse_gamepad;
|
|||
|
||||
void os_SetupInput()
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
mcfg_CreateDevices();
|
||||
#endif
|
||||
XInputGamepadDevice::CreateDevices();
|
||||
kb_gamepad = std::make_shared<WinKbGamepadDevice>(0);
|
||||
GamepadDevice::Register(kb_gamepad);
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'com.github.triplet.play'
|
||||
|
||||
apply from: 'profiling.gradle'
|
||||
|
||||
def getBuildId = { ->
|
||||
def build_id = System.getenv("TRAVIS_JOB_ID") ?: "8"
|
||||
return Integer.parseInt( build_id )
|
||||
|
@ -38,7 +40,7 @@ android {
|
|||
|
||||
ndk {
|
||||
moduleName "dc"
|
||||
abiFilters 'armeabi-v7a', 'arm64-v8a'
|
||||
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86'
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -70,11 +72,12 @@ android {
|
|||
flavorDimensions "systemtype"
|
||||
productFlavors {
|
||||
dreamcast {
|
||||
externalNativeBuild { ndkBuild { arguments "-j8" } }
|
||||
}
|
||||
naomi {
|
||||
applicationId = "com.flycast.emulator.naomi"
|
||||
versionNameSuffix " Naomi"
|
||||
externalNativeBuild { ndkBuild { arguments "NAOMI=1" } }
|
||||
externalNativeBuild { ndkBuild { arguments "NAOMI=1", "-j8" } }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -87,6 +90,12 @@ android {
|
|||
lintOptions {
|
||||
abortOnError false
|
||||
}
|
||||
|
||||
packagingOptions{
|
||||
doNotStrip "*/armeabi/*.so"
|
||||
doNotStrip "*/armeabi-v7a/*.so"
|
||||
doNotStrip "*/arm64-v8a/*.so"
|
||||
}
|
||||
}
|
||||
|
||||
afterEvaluate {
|
||||
|
@ -117,4 +126,3 @@ dependencies {
|
|||
}
|
||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||
}
|
||||
|
||||
|
|
|
@ -192,9 +192,6 @@ void common_linux_setup();
|
|||
|
||||
void os_SetupInput()
|
||||
{
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
mcfg_CreateDevices();
|
||||
#endif
|
||||
}
|
||||
|
||||
void os_SetWindowText(char const *Text)
|
||||
|
|
|
@ -89,9 +89,6 @@ void os_CreateWindow() {
|
|||
}
|
||||
|
||||
void os_SetupInput() {
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
mcfg_CreateDevices();
|
||||
#endif
|
||||
}
|
||||
|
||||
void UpdateInputState(u32 port) {
|
||||
|
|
|
@ -64,10 +64,6 @@ void os_SetupInput() {
|
|||
GamepadDevice::Register(kb_gamepad);
|
||||
mouse_gamepad = std::make_shared<OSXMouseGamepadDevice>(0);
|
||||
GamepadDevice::Register(mouse_gamepad);
|
||||
|
||||
#if DC_PLATFORM == DC_PLATFORM_DREAMCAST
|
||||
mcfg_CreateDevices();
|
||||
#endif
|
||||
}
|
||||
|
||||
void* libPvr_GetRenderTarget() {
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
r
|
||||
q
|
||||
r
|
||||
bt
|
||||
r
|
||||
bt
|
||||
info threads
|
||||
q
|
||||
r
|
||||
bt
|
||||
q
|
||||
break GetFile
|
||||
r
|
||||
bt
|
||||
q
|
||||
r
|
||||
bt
|
||||
up
|
||||
up
|
||||
up
|
||||
up
|
||||
up
|
||||
up
|
||||
p buffer
|
||||
p data
|
||||
p offset
|
||||
up
|
||||
p child_archive
|
||||
p *child_archive
|
||||
p *parent_archive
|
||||
q
|
||||
r
|
||||
q
|
||||
break mcfg_CreateDevices
|
||||
r
|
||||
q
|
||||
r
|
||||
q
|
||||
r
|
||||
q
|
||||
r
|
||||
q
|
Loading…
Reference in New Issue