lua-logic/sim/gate.lua

86 lines
1.4 KiB
Lua

Gate = {}
FFI.cdef[[
struct Gate {
int objref;
int definition_objref;
struct Port ports[1];
};
]]
function Gate.new(self, objref, definition, sim)
local o = {
objref = objref,
definition = definition,
ports = {},
sim = sim,
}
setmetatable(o, self)
self.__index = self
return o
end
function Gate.addport(self, port)
self.ports[#self.ports+1] = port
Port.setgate(port, self)
end
function Gate.getportstate(self, index)
return Port.getinputstate(self.ports[index])
end
function Gate.setportstate(self, index, state)
Port.setstate(self.ports[index], state)
end
function Gate.initdata(self)
self.data = {}
end
function Gate.getdata(self)
return self.data
end
function Gate.getportisrising(self, index)
return Port.isrising(self.ports[index])
end
function Gate.getportisfalling(self, index)
return Port.isfalling(self.ports[index])
end
function Gate.cb(gate, ...)
Simulation.queuecallback(Gate.getsim(gate), gate, ...)
end
function Gate.queue(gate, delay)
Simulation.queuegatelater(Gate.getsim(gate), gate, delay)
end
function Gate.gettick(gate)
return Gate.getsim(gate).currenttick
end
function Gate.getsim(gate)
return gate.sim
end
function Gate.getdefinition(gate)
return gate.definition
end
-- Logic functions
function Gate.init(gate)
Gate.getdefinition(gate).init(gate)
end
function Gate.logic(gate)
Gate.getdefinition(gate).logic(gate)
end
function Gate.input(gate, argv)
Gate.getdefinition(gate).input(gate, argv)
end