add c func and data

This commit is contained in:
Redo 2022-11-05 13:01:07 -06:00
parent f347d1f17d
commit 75299209b8
5 changed files with 14 additions and 9 deletions

View File

@ -144,8 +144,10 @@ void sim_gate_set_port(struct Gate* gate, int port, int state) {
}
int sim_gate_get_data(struct Gate* gate, int addr) {
assert(addr>=0 && addr<gate->data_size);
return gate->data[addr];
}
void sim_gate_set_data(struct Gate* gate, int addr, int val) {
assert(addr>=0 && addr<gate->data_size);
gate->data[addr] = val;
}

Binary file not shown.

View File

@ -10,8 +10,8 @@ GATEFUNC(Not) {
enum GateFuncs {
GateFunc_None,
GateFunc_Diode,
GateFunc_Not,
GateFunc_Diode = 1,
GateFunc_Not = 2,
};
GateFunc sim_logic_functions[] = {

View File

@ -7,7 +7,7 @@ GateDefinition = {
input = function(gate, argv) end
}
function GateDefinition.new(objref, name, description, init, logic, input, global, ports)
function GateDefinition.new(objref, name, description, init, logic, input, global, ports, datasize, logicfuncc)
name = collapseescape(name)
init = collapseescape(init)
@ -23,8 +23,8 @@ function GateDefinition.new(objref, name, description, init, logic, input, globa
ports = ports or {},
num_in_ports = 0,
num_out_ports = 0,
data_size_c = 0, -- todo
logic_function_c = 0, -- todo
data_size_c = datasize,
logic_function_c = logicfuncc,
}
local initfunc = loadstring(tostring(init))

View File

@ -75,10 +75,13 @@ function network_update()
local logic = data[i+5]
local input = data[i+6]
local global = data[i+7]
local numports = tonumber(data[i+8])
local datasize = tonumber(data[i+8])
local logicfuncc = tonumber(data[i+9])
local numports = tonumber(data[i+10])
local ports = {}
i = i + 10
for a = i+9, numports*5+i+8, 5 do
for a = i+1, numports*5+i, 5 do
local portd = {
type = tonumber(data[a]),
position = vectotable(data[a+1]),
@ -91,10 +94,10 @@ function network_update()
if not portd.direction then print(line) end
end
local definition = GateDefinition.new(objref, name, desc, init, logic, input, global, ports)
local definition = GateDefinition.new(objref, name, desc, init, logic, input, global, ports, datasize, logicfuncc)
Simulation.addgatedefinition(sim, definition)
i = i + 8 + numports*5
i = i + numports*5
elseif data[i] == "SL" then
local wire = Simulation.getwirebyref(sim, tonumber(data[i+1]))
if wire ~= nil then