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) { int sim_gate_get_data(struct Gate* gate, int addr) {
assert(addr>=0 && addr<gate->data_size);
return gate->data[addr]; return gate->data[addr];
} }
void sim_gate_set_data(struct Gate* gate, int addr, int val) { void sim_gate_set_data(struct Gate* gate, int addr, int val) {
assert(addr>=0 && addr<gate->data_size);
gate->data[addr] = val; gate->data[addr] = val;
} }

Binary file not shown.

View File

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

View File

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

View File

@ -75,10 +75,13 @@ function network_update()
local logic = data[i+5] local logic = data[i+5]
local input = data[i+6] local input = data[i+6]
local global = data[i+7] 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 = {} 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 = { local portd = {
type = tonumber(data[a]), type = tonumber(data[a]),
position = vectotable(data[a+1]), position = vectotable(data[a+1]),
@ -91,10 +94,10 @@ function network_update()
if not portd.direction then print(line) end if not portd.direction then print(line) end
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) Simulation.addgatedefinition(sim, definition)
i = i + 8 + numports*5 i = i + numports*5
elseif data[i] == "SL" then elseif data[i] == "SL" then
local wire = Simulation.getwirebyref(sim, tonumber(data[i+1])) local wire = Simulation.getwirebyref(sim, tonumber(data[i+1]))
if wire ~= nil then if wire ~= nil then