lua-logic/sim/gate.lua

83 lines
1.5 KiB
Lua

Gate = {}
function Gate.new(objref, definition)
local o = {
objref = objref,
definition = definition,
ports = {},
port_nets = {},
in_queue = false,
logic = definition.logic,
}
return o
end
function Gate.addport(gate, port)
gate.ports[#gate.ports+1] = port
Port.setgate(port, gate)
end
function Gate.getportstate(gate, index)
return gate.port_nets[index].state
end
function Gate.setportstate(gate, index, state)
local port = gate.ports[index]
if state ~= port.state then
local group = port.group
group.state_num = group.state_num - (port.state and 1 or 0) + (state and 1 or 0)
port.state = state
if (group.state_num>0) ~= group.state then
Simulation.queuegroup(GSim, group)
end
end
end
function Gate.initdata(gate)
gate.data = {}
end
function Gate.getdata(gate)
return gate.data
end
function Gate.getportisrising(gate, index)
return Port.isrising(gate.ports[index])
end
function Gate.getportisfalling(gate, index)
return Port.isfalling(gate.ports[index])
end
function Gate.cb(gate, ...)
Simulation.queuecallback(GSim, gate, ...)
end
function Gate.queue(gate, delay)
Simulation.queuegatelater(GSim, gate, delay)
end
function Gate.gettick(gate)
return GSim.currenttick
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.logic(gate)
end
function Gate.input(gate, argv)
Gate.getdefinition(gate).input(gate, argv)
end