Скрипты контрольных сумм
Lua-скрипты могут использоваться как пользовательские калькуляторы контрольных сумм. Назначаются через Settings > Checksum Settings — в диалоге один комбобокс со встроенными алгоритмами и скриптами.
Маркер @checksum-script
Добавьте -- @checksum-script в первых 512 байтах скрипта.
Только скрипты с этим маркером попадают в список диалога
Checksum Settings.
Поведение
- При выборе таргета с привязанным скриптом — скрипт запускается автоматически.
- Скрипт вызывает
mp.ui.set_statusbar(label, value)— стандартные виджеты чексумм скрываются, в статус-баре показывается одна строка"label: value". - При переключении на таргет без скрипта —
mp.ui.reset_statusbar()восстанавливает стандартные виджеты автоматически.
Маппинги
Хранятся в <config>/checksum_profiles.json:
[
{
"target_pattern": "K0R Auto Target",
"checksum_name": "",
"script_name": "renesas_nec_checksum.lua"
}
]
Пример: renesas_nec_checksum.lua
-- renesas_nec_checksum.lua
-- @checksum-script
-- Считает SUM-RL78 для Renesas RL78 (0x000-0x3FF)
-- и NEC 78K0R/78K0 (0x000-0x7FF)
local cfg = mp.config.get()
local target = cfg.target or ""
local family = cfg.family or ""
local RANGES = {
{ pattern = "RL78", start_addr = 0x0000, length = 0x400 }, -- 1 KB
{ pattern = "78K0R", start_addr = 0x0000, length = 0x800 }, -- 2 KB
{ pattern = "78K0", start_addr = 0x0000, length = 0x800 }, -- 2 KB
}
local range = nil
for _, r in ipairs(RANGES) do
if family:find(r.pattern) or target:find(r.pattern) then
range = r; break
end
end
if not range then
mp.log.warn("renesas_nec_checksum: unknown family, using default 0x400")
range = { start_addr = 0x0000, length = 0x400 }
end
local region = mp.memory.get_regions()[1]
local data = mp.memory.read_range(region, range.start_addr, range.length)
local sum = mp.checksum.sum_rl78(data)
mp.ui.set_statusbar(target .. " Block 0", string.format("0x%04X", sum))
Этот скрипт идёт в scripts/examples/renesas_nec_checksum.lua
и по умолчанию привязан к таргетам RL78 / 78K0R / 78K0.