#477 script config moved to TIC module

This commit is contained in:
BADIM-PC\Vadim
2017-12-21 10:28:14 +03:00
parent b26eb6bd1c
commit 1280a1291a
6 changed files with 199 additions and 162 deletions
+31 -39
View File
@@ -559,8 +559,10 @@ void tic_close(tic_mem* memory)
machine->state.initialized = false;
closeJavascript(machine);
closeLua(machine);
getLuaScriptConfig()->close(memory);
getMoonScriptConfig()->close(memory);
getJsScriptConfig()->close(memory);
blip_delete(machine->blip);
free(memory->samples.buffer);
@@ -1500,13 +1502,19 @@ static bool isJavascript(const char* code)
return compareMetatag(code, "script", "js") || compareMetatag(code, "script", "javascript");
}
static tic_script_lang api_get_script(tic_mem* memory)
static const tic_script_config* getScriptConfig(const char* code)
{
if(isMoonscript(memory->cart.bank0.code.data)) return tic_script_moon;
if(isJavascript(memory->cart.bank0.code.data)) return tic_script_js;
return tic_script_lua;
if(isMoonscript(code)) return getMoonScriptConfig();
if(isJavascript(code)) return getJsScriptConfig();
return getLuaScriptConfig();
}
static const tic_script_config* api_get_script_config(tic_mem* memory)
{
return getScriptConfig(memory->cart.bank0.code.data);
}
static void updateSaveid(tic_mem* memory)
{
memset(memory->saveid, 0, sizeof memory->saveid);
@@ -1527,9 +1535,9 @@ static void updateSaveid(tic_mem* memory)
}
}
static void api_tick(tic_mem* memory, tic_tick_data* data)
static void api_tick(tic_mem* tic, tic_tick_data* data)
{
tic_machine* machine = (tic_machine*)memory;
tic_machine* machine = (tic_machine*)tic;
machine->data = data;
@@ -1544,7 +1552,7 @@ static void api_tick(tic_mem* memory, tic_tick_data* data)
for(s32 i = TIC_BANKS - 1; i >= 0; i--)
{
const char* bankCode = memory->cart.banks[i].code.data;
const char* bankCode = tic->cart.banks[i].code.data;
if(strlen(bankCode))
strcat(code, bankCode);
@@ -1554,35 +1562,18 @@ static void api_tick(tic_mem* memory, tic_tick_data* data)
data->preprocessor(data->data, code);
bool done = false;
const tic_script_config* config = NULL;
if(strlen(code))
{
cart2ram(memory);
memory->input = compareMetatag(code, "input", "mouse") ? tic_mouse_input : tic_gamepad_input;
cart2ram(tic);
tic->input = compareMetatag(code, "input", "mouse") ? tic_mouse_input : tic_gamepad_input;
if(memory->input == tic_mouse_input)
memory->ram.vram.vars.mask.data = 0;
if(tic->input == tic_mouse_input)
tic->ram.vram.vars.mask.data = 0;
memory->script = tic_script_lua;
if (isMoonscript(code))
{
if(initMoonscript(machine, code))
{
memory->script = tic_script_moon;
done = true;
}
}
else if(isJavascript(code))
{
if(initJavascript(machine, code))
{
memory->script = tic_script_js;
done = true;
}
}
else if(initLua(machine, code))
done = true;
config = getScriptConfig(code);
done = config->init(tic, code);
}
else
{
@@ -1595,17 +1586,17 @@ static void api_tick(tic_mem* memory, tic_tick_data* data)
{
data->start = data->counter();
machine->state.scanline = memory->script == tic_script_js ? callJavascriptScanline : callLuaScanline;
machine->state.ovr.callback = memory->script == tic_script_js ? callJavascriptOverlap : callLuaOverlap;
machine->state.tick = config->tick;
machine->state.scanline = config->scanline;
machine->state.ovr.callback = config->overlap;
machine->state.initialized = true;
}
else return;
}
}
memory->script == tic_script_js
? callJavascriptTick(machine)
: callLuaTick(machine);
machine->state.tick(tic);
}
static void api_scanline(tic_mem* memory, s32 row, void* data)
@@ -1877,7 +1868,6 @@ static void initApi(tic_api* api)
INIT_API(reset);
INIT_API(pause);
INIT_API(resume);
INIT_API(get_script);
INIT_API(sync);
INIT_API(btnp);
INIT_API(load);
@@ -1886,6 +1876,8 @@ static void initApi(tic_api* api)
INIT_API(tick_end);
INIT_API(blit);
INIT_API(get_script_config);
#undef INIT_API
}