flycast/core/nullDC.cpp

300 lines
6.6 KiB
C++
Raw Normal View History

2013-12-19 17:10:14 +00:00
// nullDC.cpp : Makes magic cookies
//
//initialse Emu
#include "types.h"
#include "oslib/oslib.h"
#include "oslib/audiostream.h"
2013-12-19 17:10:14 +00:00
#include "hw/mem/_vmem.h"
#include "stdclass.h"
#include "cfg/cfg.h"
#include "types.h"
#include "hw/maple/maple_cfg.h"
#include "hw/sh4/sh4_mem.h"
#include "webui/server.h"
#include "hw/naomi/naomi_cart.h"
2013-12-19 17:10:14 +00:00
settings_t settings;
/*
libndc
//initialise (and parse the command line)
ndc_init(argc,argv);
...
//run a dreamcast slice
//either a frame, or up to 25 ms of emulation
//returns 1 if the frame is ready (fb needs to be flipped -- i'm looking at you android)
ndc_step();
...
//terminate (and free everything)
ndc_term()
*/
#if HOST_OS==OS_WINDOWS
#include <windows.h>
#endif
int GetFile(char *szFileName, char *szParse=0,u32 flags=0)
{
cfgLoadStr("config","image",szFileName,"null");
if (strcmp(szFileName,"null")==0)
{
#if HOST_OS==OS_WINDOWS
OPENFILENAME ofn;
ZeroMemory( &ofn , sizeof( ofn));
ofn.lStructSize = sizeof ( ofn );
ofn.hwndOwner = NULL ;
ofn.lpstrFile = szFileName ;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFilter = "All\0*.*\0\0";
ofn.nFilterIndex =1;
ofn.lpstrFileTitle = NULL ;
ofn.nMaxFileTitle = 0 ;
ofn.lpstrInitialDir=NULL ;
ofn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST ;
if (GetOpenFileNameA(&ofn))
{
//already there
//strcpy(szFileName,ofn.lpstrFile);
}
#endif
}
return 1;
}
s32 plugins_Init()
{
if (s32 rv = libPvr_Init())
return rv;
if (s32 rv = libGDR_Init())
return rv;
#if DC_PLATFORM == DC_PLATFORM_NAOMI
if (!naomi_cart_SelectFile(libPvr_GetRenderTarget()))
2013-12-19 17:10:14 +00:00
return rv_serror;
#endif
if (s32 rv = libAICA_Init())
return rv;
if (s32 rv = libARM_Init())
return rv;
//if (s32 rv = libExtDevice_Init())
// return rv;
return rv_ok;
}
void plugins_Term()
{
//term all plugins
//libExtDevice_Term();
libARM_Term();
libAICA_Term();
libGDR_Term();
libPvr_Term();
}
void plugins_Reset(bool Manual)
{
libPvr_Reset(Manual);
libGDR_Reset(Manual);
libAICA_Reset(Manual);
libARM_Reset(Manual);
//libExtDevice_Reset(Manual);
}
#if !defined(TARGET_NO_WEBUI)
2013-12-19 17:10:14 +00:00
void* webui_th(void* p)
{
webui_start();
return 0;
}
cThread webui_thd(&webui_th,0);
#endif
2013-12-19 17:10:14 +00:00
int dc_init(int argc,wchar* argv[])
{
setbuf(stdin,0);
setbuf(stdout,0);
setbuf(stderr,0);
if (!_vmem_reserve())
{
printf("Failed to alloc mem\n");
return -1;
}
#if !defined(TARGET_NO_WEBUI)
webui_thd.Start();
#endif
2013-12-19 17:10:14 +00:00
if(ParseCommandLine(argc,argv))
{
return 69;
}
if(!cfgOpen())
{
msgboxf("Unable to open config file",MBX_ICONERROR);
return -4;
}
LoadSettings();
#ifndef _ANDROID
2013-12-19 17:10:14 +00:00
os_CreateWindow();
#endif
int rv= 0;
2015-05-16 08:04:30 +00:00
#if HOST_OS != OS_DARWIN
#define DATA_PATH "/data/"
#else
#define DATA_PATH "/"
#endif
if (settings.bios.UseReios || !LoadRomFiles(get_readonly_data_path(DATA_PATH)))
2013-12-19 17:10:14 +00:00
{
if (!LoadHle(get_readonly_data_path(DATA_PATH)))
return -3;
else
printf("Did not load bios, using reios\n");
2013-12-19 17:10:14 +00:00
}
2015-07-25 06:39:35 +00:00
#if FEAT_SHREC != DYNAREC_NONE
2013-12-19 17:10:14 +00:00
if(settings.dynarec.Enable)
{
Get_Sh4Recompiler(&sh4_cpu);
printf("Using Recompiler\n");
}
else
#endif
{
Get_Sh4Interpreter(&sh4_cpu);
printf("Using Interpreter\n");
}
InitAudio();
sh4_cpu.Init();
mem_Init();
plugins_Init();
mem_map_default();
#ifndef _ANDROID
2013-12-19 17:10:14 +00:00
mcfg_CreateDevices();
#else
mcfg_CreateDevices();
#endif
2013-12-19 17:10:14 +00:00
plugins_Reset(false);
mem_Reset(false);
sh4_cpu.Reset(false);
return rv;
}
void dc_run()
{
sh4_cpu.Run();
}
void dc_term()
{
sh4_cpu.Term();
plugins_Term();
_vmem_release();
#ifndef _ANDROID
2013-12-19 17:10:14 +00:00
SaveSettings();
#endif
SaveRomFiles(get_writable_data_path("/data/"));
2013-12-19 17:10:14 +00:00
}
void LoadSettings()
{
#ifndef _ANDROID
2013-12-19 17:10:14 +00:00
settings.dynarec.Enable = cfgLoadInt("config","Dynarec.Enabled", 1)!=0;
settings.dynarec.idleskip = cfgLoadInt("config","Dynarec.idleskip",1)!=0;
settings.dynarec.unstable_opt = cfgLoadInt("config","Dynarec.unstable-opt",0);
//disable_nvmem can't be loaded, because nvmem init is before cfg load
Squash changes from andoidui into single commit Integrate previously locked settings with valid user warning Put a note about the beta compile link in the README.md Add a super fancy about that supports Github commit logs Revise about with git log, Highlight current build in commits Check for a null value when getting the current commit sha Chinese Simplified Translation from @weihan1102 Rename Simplified Chinese res folder for proper complie Add links to the website and beta compile site from about Add option for custom mapping to set joystick to non-dpad Fix a missing check for the user saved value of the A button The Moga only operates one way, there is no variation test Add region values, Set cable to match formatting of others Reduce the number of random string array calls, jsCompat It was unnecessary to keep getting the array, It was even less necessary to keep getting the preference values. The port identification letters are set multi-lingual values. Label the about links to prevent any confusion (Not mirrors) Missing a check on the motion events to determine compat Add a check to verify Kitkat, Remove the standard override The new API verification complains about the Override, so this is a preventative step for if and when it is updated. It may also prevent some issues with compatibility. Run organize imports to reduce the amount of excess code Add a controller option to go to custom layout from selection Prevent a leak where multiple items were highlighted in list @AndroidGX French Translation resources
2014-01-27 15:52:23 +00:00
settings.dreamcast.cable = cfgLoadInt("config","Dreamcast.Cable",3);
2013-12-19 17:10:14 +00:00
settings.dreamcast.RTC = cfgLoadInt("config","Dreamcast.RTC",GetRTC_now());
settings.dreamcast.region = cfgLoadInt("config","Dreamcast.Region",3);
settings.dreamcast.broadcast = cfgLoadInt("config","Dreamcast.Broadcast",4);
settings.aica.LimitFPS = cfgLoadInt("config","aica.LimitFPS",1);
settings.aica.NoBatch = cfgLoadInt("config","aica.NoBatch",0);
settings.aica.NoSound = cfgLoadInt("config","aica.NoSound",0);
2013-12-19 17:10:14 +00:00
settings.rend.UseMipmaps = cfgLoadInt("config","rend.UseMipmaps",1);
settings.rend.WideScreen = cfgLoadInt("config","rend.WideScreen",0);
settings.rend.ModifierVolumes = cfgLoadInt("config","rend.ModifierVolumes",1);
settings.rend.Clipping = cfgLoadInt("config","rend.Clipping",1);
2013-12-19 17:10:14 +00:00
settings.pvr.subdivide_transp = cfgLoadInt("config","pvr.Subdivide",0);
settings.pvr.ta_skip = cfgLoadInt("config","ta.skip",0);
settings.pvr.rend = cfgLoadInt("config","pvr.rend",0);
settings.pvr.MaxThreads = cfgLoadInt("config", "pvr.MaxThreads", 3);
settings.pvr.SynchronousRendering = cfgLoadInt("config", "pvr.SynchronousRendering", 0);
settings.debug.SerialConsole = cfgLoadInt("config", "Debug.SerialConsoleEnabled", 0) != 0;
2015-03-22 00:16:28 +00:00
settings.reios.ElfFile = cfgLoadStr("reios", "ElfFile","");
settings.validate.OpenGlChecks = cfgLoadInt("validate", "OpenGlChecks", 0) != 0;
#endif
2013-12-19 17:10:14 +00:00
settings.bios.UseReios = cfgLoadInt("config", "bios.UseReios", 0);
settings.pvr.HashLogFile = cfgLoadStr("testing", "ta.HashLogFile", "");
settings.pvr.HashCheckFile = cfgLoadStr("testing", "ta.HashCheckFile", "");
2016-03-02 05:48:34 +00:00
#if SUPPORT_DISPMANX
settings.dispmanx.Width = cfgLoadInt("dispmanx","width",640);
settings.dispmanx.Height = cfgLoadInt("dispmanx","height",480);
settings.dispmanx.Maintain_Aspect = cfgLoadBool("dispmanx","maintain_aspect",true);
#endif
#if (HOST_OS != OS_LINUX || defined(_ANDROID) || defined(TARGET_PANDORA))
2013-12-19 17:10:14 +00:00
settings.aica.BufferSize=2048;
#else
settings.aica.BufferSize=1024;
#endif
2016-03-02 05:48:34 +00:00
#if USE_OMX
settings.omx.Audio_Latency = cfgLoadInt("omx","audio_latency",100);
settings.omx.Audio_HDMI = cfgLoadBool("omx","audio_hdmi",true);
#endif
2013-12-19 17:10:14 +00:00
/*
//make sure values are valid
settings.dreamcast.cable = min(max(settings.dreamcast.cable, 0),3);
settings.dreamcast.region = min(max(settings.dreamcast.region, 0),3);
settings.dreamcast.broadcast= min(max(settings.dreamcast.broadcast,0),4);
*/
}
void SaveSettings()
{
cfgSaveInt("config","Dynarec.Enabled", settings.dynarec.Enable);
cfgSaveInt("config","Dreamcast.Cable", settings.dreamcast.cable);
cfgSaveInt("config","Dreamcast.RTC", settings.dreamcast.RTC);
cfgSaveInt("config","Dreamcast.Region", settings.dreamcast.region);
cfgSaveInt("config","Dreamcast.Broadcast",settings.dreamcast.broadcast);
}