mirror of
https://github.com/holub/mame
synced 2025-06-07 05:13:46 +03:00
-luaengine.cpp: Fixed jobs waiting for frame updates sleeping forever.
-sega_beena.cpp: Removed requires external artwork flag - the internal artwork is adequate.
This commit is contained in:
parent
689e75b439
commit
a101939009
@ -58,23 +58,21 @@ classes are also available as properties of the emulator interface.
|
|||||||
Methods
|
Methods
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
emu.wait(duration, …)
|
emu.wait(duration)
|
||||||
Yields for the specified duration in terms of emulated time. The duration
|
Yields for the specified duration in terms of emulated time. The duration
|
||||||
may be specified as an :ref:`attotime <luascript-ref-attotime>` or a number
|
may be specified as an :ref:`attotime <luascript-ref-attotime>` or a number
|
||||||
in seconds. Any additional arguments are returned to the caller. Returns a
|
in seconds. Returns a Boolean indicating whether the duration expired
|
||||||
Boolean indicating whether the duration expired normally.
|
normally.
|
||||||
|
|
||||||
All outstanding calls to ``emu.wait`` will return ``false`` immediately if a
|
All outstanding calls to ``emu.wait`` will return ``false`` immediately if a
|
||||||
saved state is loaded or the emulation session ends. Calling this function
|
saved state is loaded or the emulation session ends. Calling this function
|
||||||
from callbacks that are not run as coroutines will raise an error.
|
from callbacks that are not run as coroutines will raise an error.
|
||||||
emu.wait_next_update(…)
|
emu.wait_next_update()
|
||||||
Yields until the next video/UI update. Any arguments are returned to the
|
Yields until the next video/UI update. Calling this function from callbacks
|
||||||
caller. Calling this function from callbacks that are not run as coroutines
|
that are not run as coroutines will raise an error.
|
||||||
will raise an error.
|
emu.wait_next_frame()
|
||||||
emu.wait_next_frame(…)
|
Yields until the next emulated frame completes. Calling this function from
|
||||||
Yields until the next emulated frame completes. Any arguments are returned
|
callbacks that are not run as coroutines will raise an error.
|
||||||
to the caller. Calling this function from callbacks that are not run as
|
|
||||||
coroutines will raise an error.
|
|
||||||
emu.add_machine_reset_notifier(callback)
|
emu.add_machine_reset_notifier(callback)
|
||||||
Add a callback to receive notifications when the emulated system is reset.
|
Add a callback to receive notifications when the emulated system is reset.
|
||||||
Returns a :ref:`notifier subscription <luascript-ref-notifiersub>`.
|
Returns a :ref:`notifier subscription <luascript-ref-notifiersub>`.
|
||||||
|
@ -679,8 +679,7 @@ void lua_engine::on_machine_frame()
|
|||||||
{
|
{
|
||||||
std::vector<int> tasks = std::move(m_frame_tasks);
|
std::vector<int> tasks = std::move(m_frame_tasks);
|
||||||
m_frame_tasks.clear();
|
m_frame_tasks.clear();
|
||||||
for (int ref : tasks)
|
resume_tasks(m_lua_state, tasks, true); // TODO: doesn't need to return anything
|
||||||
resume(ref);
|
|
||||||
|
|
||||||
m_notifiers->on_frame();
|
m_notifiers->on_frame();
|
||||||
|
|
||||||
@ -816,7 +815,7 @@ void lua_engine::initialize()
|
|||||||
|
|
||||||
sol::table emu = sol().create_named_table("emu");
|
sol::table emu = sol().create_named_table("emu");
|
||||||
emu["wait"] = sol::yielding(
|
emu["wait"] = sol::yielding(
|
||||||
[this] (sol::this_state s, sol::object duration, sol::variadic_args args)
|
[this] (sol::this_state s, sol::object duration)
|
||||||
{
|
{
|
||||||
attotime delay;
|
attotime delay;
|
||||||
if (!duration)
|
if (!duration)
|
||||||
@ -849,26 +848,22 @@ void lua_engine::initialize()
|
|||||||
if (m_waiting_tasks.begin() == pos)
|
if (m_waiting_tasks.begin() == pos)
|
||||||
m_timer->reset(delay);
|
m_timer->reset(delay);
|
||||||
m_waiting_tasks.emplace(pos, expiry, ref);
|
m_waiting_tasks.emplace(pos, expiry, ref);
|
||||||
|
|
||||||
return sol::variadic_results(args.begin(), args.end());
|
|
||||||
});
|
});
|
||||||
emu["wait_next_update"] = sol::yielding(
|
emu["wait_next_update"] = sol::yielding(
|
||||||
[this] (sol::this_state s, sol::variadic_args args)
|
[this] (sol::this_state s)
|
||||||
{
|
{
|
||||||
int const ret = lua_pushthread(s);
|
int const ret = lua_pushthread(s);
|
||||||
if (ret == 1)
|
if (ret == 1)
|
||||||
luaL_error(s, "cannot wait from outside coroutine");
|
luaL_error(s, "cannot wait from outside coroutine");
|
||||||
m_update_tasks.emplace_back(luaL_ref(s, LUA_REGISTRYINDEX));
|
m_update_tasks.emplace_back(luaL_ref(s, LUA_REGISTRYINDEX));
|
||||||
return sol::variadic_results(args.begin(), args.end());
|
|
||||||
});
|
});
|
||||||
emu["wait_next_frame"] = sol::yielding(
|
emu["wait_next_frame"] = sol::yielding(
|
||||||
[this] (sol::this_state s, sol::variadic_args args)
|
[this] (sol::this_state s)
|
||||||
{
|
{
|
||||||
int const ret = lua_pushthread(s);
|
int const ret = lua_pushthread(s);
|
||||||
if (ret == 1)
|
if (ret == 1)
|
||||||
luaL_error(s, "cannot wait from outside coroutine");
|
luaL_error(s, "cannot wait from outside coroutine");
|
||||||
m_frame_tasks.emplace_back(luaL_ref(s, LUA_REGISTRYINDEX));
|
m_frame_tasks.emplace_back(luaL_ref(s, LUA_REGISTRYINDEX));
|
||||||
return sol::variadic_results(args.begin(), args.end());
|
|
||||||
});
|
});
|
||||||
emu.set_function("add_machine_reset_notifier", make_notifier_adder(m_notifiers->on_reset, "machine reset"));
|
emu.set_function("add_machine_reset_notifier", make_notifier_adder(m_notifiers->on_reset, "machine reset"));
|
||||||
emu.set_function("add_machine_stop_notifier", make_notifier_adder(m_notifiers->on_stop, "machine stop"));
|
emu.set_function("add_machine_stop_notifier", make_notifier_adder(m_notifiers->on_stop, "machine stop"));
|
||||||
@ -2144,8 +2139,7 @@ bool lua_engine::frame_hook()
|
|||||||
{
|
{
|
||||||
std::vector<int> tasks = std::move(m_update_tasks);
|
std::vector<int> tasks = std::move(m_update_tasks);
|
||||||
m_update_tasks.clear();
|
m_update_tasks.clear();
|
||||||
for (int ref : tasks)
|
resume_tasks(m_lua_state, tasks, true); // TODO: doesn't need to return anything
|
||||||
resume(ref);
|
|
||||||
|
|
||||||
return execute_function("LUA_ON_FRAME_DONE");
|
return execute_function("LUA_ON_FRAME_DONE");
|
||||||
}
|
}
|
||||||
|
@ -2228,5 +2228,5 @@ ROM_END
|
|||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
|
||||||
// year, name, parent, compat, machine, input, class, init, company, fullname, flags
|
// year, name, parent, compat, machine, input, class, init, company, fullname, flags
|
||||||
CONS( 2005, beena, 0, 0, sega_beena, sega_beena, sega_beena_state, empty_init, "Sega", "Advanced Pico BEENA", MACHINE_REQUIRES_ARTWORK|MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_TIMING|MACHINE_IMPERFECT_SOUND )
|
CONS( 2005, beena, 0, 0, sega_beena, sega_beena, sega_beena_state, empty_init, "Sega", "Advanced Pico BEENA", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_TIMING|MACHINE_IMPERFECT_SOUND )
|
||||||
CONS( 2005, tvochken, 0, 0, sega_9h0_0008, tvochken, tvochken_state, empty_init, "Sega", "TV Ocha-Ken", MACHINE_REQUIRES_ARTWORK|MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_TIMING|MACHINE_IMPERFECT_SOUND )
|
CONS( 2005, tvochken, 0, 0, sega_9h0_0008, tvochken, tvochken_state, empty_init, "Sega", "TV Ocha-Ken", MACHINE_REQUIRES_ARTWORK|MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_TIMING|MACHINE_IMPERFECT_SOUND )
|
||||||
|
Loading…
Reference in New Issue
Block a user