61 lines
1.4 KiB
Lua
61 lines
1.4 KiB
Lua
--[[
|
|
|
|
TechAge
|
|
=======
|
|
|
|
Copyright (C) 2019-2022 Joachim Stolberg
|
|
|
|
AGPL v3
|
|
See LICENSE.txt for more information
|
|
|
|
K/V Store for the Beduino controller
|
|
|
|
]]--
|
|
|
|
local COSTS = 400
|
|
|
|
local function ta_kv_init(cpu_pos, address, regA, regB, regC)
|
|
local nvm = techage.get_nvm(cpu_pos)
|
|
nvm.kv_store = {}
|
|
return 1, COSTS
|
|
end
|
|
|
|
local function ta_kv_add(cpu_pos, address, regA, regB, regC)
|
|
local nvm = techage.get_nvm(cpu_pos)
|
|
local text = vm16.read_ascii(cpu_pos, regA, 32)
|
|
nvm.kv_store[text] = regB
|
|
return 1, COSTS
|
|
end
|
|
|
|
local function ta_kv_get(cpu_pos, address, regA, regB, regC)
|
|
local nvm = techage.get_nvm(cpu_pos)
|
|
local text = vm16.read_ascii(cpu_pos, regA, 32)
|
|
return nvm.kv_store[text] or 0, COSTS
|
|
end
|
|
|
|
local kvstore_c = [[
|
|
// Initialize the key/value store
|
|
func ta_kv_init() {
|
|
return system(0x140, 0);
|
|
}
|
|
|
|
// Add a key/value pair to the store
|
|
func ta_kv_add(key_str, value) {
|
|
return system(0x141, key_str, value);
|
|
}
|
|
|
|
// Returns the value for the given key string
|
|
func ta_kv_get(key_str) {
|
|
return system(0x142, key_str);
|
|
}
|
|
]]
|
|
|
|
minetest.register_on_mods_loaded(function()
|
|
if minetest.global_exists("beduino") and minetest.global_exists("vm16") then
|
|
beduino.lib.register_SystemHandler(0x140, ta_kv_init)
|
|
beduino.lib.register_SystemHandler(0x141, ta_kv_add)
|
|
beduino.lib.register_SystemHandler(0x142, ta_kv_get)
|
|
vm16.register_ro_file("beduino", "ta_kvstore.c", kvstore_c)
|
|
end
|
|
end)
|