summaryrefslogtreecommitdiffstatshomepage
path: root/plugins/inputmacro/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/inputmacro/init.lua')
-rw-r--r--plugins/inputmacro/init.lua37
1 files changed, 22 insertions, 15 deletions
diff --git a/plugins/inputmacro/init.lua b/plugins/inputmacro/init.lua
index 99e3d61f1d4..9c520f3a503 100644
--- a/plugins/inputmacro/init.lua
+++ b/plugins/inputmacro/init.lua
@@ -10,16 +10,21 @@ local exports = {
local inputmacro = exports
+local frame_subscription, stop_subscription
+
function inputmacro.startplugin()
--[[
Configuration data:
* name: display name (string)
* binding: activation sequence (input sequence)
+ * bindingcfg: activation sequence configuration (string)
* earlycancel: cancel or complete on release (Boolean)
- * loop: -1 = release, 0 = prolong, >0 = loop to step on hold (int)
+ * loop: -1 = release, 0 = prolong, >0 = loop to step on hold (integer)
* steps:
* inputs:
- * port: port (I/O port)
+ * port: port tag (string)
+ * mask: port field mask (integer)
+ * type: port field type (integer)
* field: field (I/O port field)
* delay: delay before activating inputs in frames (integer)
* duration: duration to activate inputs for (integer)
@@ -30,18 +35,19 @@ function inputmacro.startplugin()
]]
local macros = { }
local active_inputs = { }
- local shortname
local menu
local input
local function activate_inputs(inputs)
for index, input in ipairs(inputs) do
- active_inputs[string.format('%s.%d.%d', input.port.tag, input.field.mask, input.field.type)] = input.field
+ if input.field then
+ active_inputs[string.format('%s.%d.%d', input.port, input.mask, input.type)] = input.field
+ end
end
end
local function process_frame()
- previous_inputs = active_inputs
+ local previous_inputs = active_inputs
active_inputs = { }
for index, macro in ipairs(macros) do
@@ -93,23 +99,24 @@ function inputmacro.startplugin()
end
for key, field in pairs(previous_inputs) do
if not active_inputs[key] then
- field:set_value(0)
+ field:clear_value()
end
end
end
local function start()
input = manager.machine.input
- if shortname ~= emu.romname() then
- local persister = require('inputmacro/inputmacro_persist')
- macros = persister.load_settings()
- shortname = emu.romname()
- end
+ local persister = require('inputmacro/inputmacro_persist')
+ macros = persister.load_settings()
end
local function stop()
local persister = require('inputmacro/inputmacro_persist')
persister:save_settings(macros)
+
+ macros = { }
+ active_inputs = { }
+ menu = nil
end
local function menu_callback(index, event)
@@ -124,10 +131,10 @@ function inputmacro.startplugin()
return menu:populate()
end
- emu.register_frame_done(process_frame)
- emu.register_start(start)
- emu.register_stop(stop)
- emu.register_menu(menu_callback, menu_populate, _('Input Macros'))
+ frame_subscription = emu.add_machine_frame_notifier(process_frame)
+ emu.register_prestart(start)
+ stop_subscription = emu.add_machine_stop_notifier(stop)
+ emu.register_menu(menu_callback, menu_populate, _p('plugin-inputmacro', 'Input Macros'))
end
return exports