Перейти к основному содержимому

Скрипты контрольных сумм

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.