make sim local; start circuit compiler
This commit is contained in:
parent
569e79ab96
commit
0963ef8ca8
@ -1,6 +1,44 @@
|
||||
|
||||
local ffi = FFI or require("ffi")
|
||||
Simulation = Simulation or {}
|
||||
|
||||
ffi.cdef([[
|
||||
struct Net {
|
||||
|
||||
};
|
||||
]])
|
||||
|
||||
function Simulation.compile(sim)
|
||||
-- assemble a list of all groups
|
||||
local groups = {}
|
||||
for wire_idx, wire in pairs(sim.wires) do
|
||||
local group = Wire.getgroup(wire)
|
||||
groups[group] = group
|
||||
end
|
||||
local num_groups = 0
|
||||
for group_id, group in pairs(groups) do
|
||||
num_groups = num_groups+1
|
||||
end
|
||||
|
||||
-- construct each gate into an array
|
||||
|
||||
-- construct each group into an array
|
||||
local group_idx = 0
|
||||
local array_nets = ffi.new("struct Net["..num_groups.."]")
|
||||
for group_id, group in pairs(groups) do
|
||||
local c_net = ffi.new("struct Net")
|
||||
|
||||
local ports_update = {}
|
||||
for port_id, port in pairs(group.in_ports) do
|
||||
if port.causeupdate then
|
||||
num_ports_update = num
|
||||
end
|
||||
end
|
||||
--c_net.ports_update = ffi.new("struct Port["..
|
||||
|
||||
array_nets[group_idx] = c_net
|
||||
group_idx = group_idx + 1
|
||||
end
|
||||
end
|
||||
|
||||
function Simulation.decompile(sim)
|
||||
|
@ -10,6 +10,7 @@ OPT_SAVE_DIR = OPT_SAVE_DIR:gsub("/$", "")
|
||||
print("Save location set to \""..OPT_SAVE_DIR.."\"")
|
||||
|
||||
local socket = require("socket")
|
||||
local ffi = require("ffi")
|
||||
|
||||
dofile("iosafe.lua")
|
||||
|
||||
@ -21,7 +22,9 @@ dofile("gatedef.lua")
|
||||
dofile("gate.lua")
|
||||
dofile("port.lua")
|
||||
dofile("save.lua")
|
||||
FFI = ffi
|
||||
dofile("compile.lua")
|
||||
FFI = nil
|
||||
|
||||
OPT_TICK_ENABLED = true
|
||||
OPT_TICK_TIME = 0.032
|
||||
@ -145,7 +148,7 @@ while 1 do
|
||||
local max = vectotable(data[i+4])
|
||||
local bounds = {min[1], min[2], min[3], max[1], max[2], max[3]}
|
||||
|
||||
local wire = Wire.new(Wire, tonumber(data[i+1]), tonumber(data[i+2]), bounds)
|
||||
local wire = Wire.new(Wire, tonumber(data[i+1]), tonumber(data[i+2]), bounds, sim)
|
||||
Simulation.addwire(sim, wire)
|
||||
|
||||
i = i + 4
|
||||
|
@ -125,22 +125,22 @@ function Simulation.removewire(self, objref)
|
||||
|
||||
for x = bounds[1]+1, bounds[4]-1, 2 do
|
||||
for z = bounds[3]+1, bounds[6]-1, 2 do
|
||||
sim[x][bounds[2]][z][wire] = nil
|
||||
sim[x][bounds[5]][z][wire] = nil
|
||||
self[x][bounds[2]][z][wire] = nil
|
||||
self[x][bounds[5]][z][wire] = nil
|
||||
end
|
||||
end
|
||||
|
||||
for y = bounds[2]+1, bounds[5]-1, 2 do
|
||||
for z = bounds[3]+1, bounds[6]-1, 2 do
|
||||
sim[bounds[1]][y][z][wire] = nil
|
||||
sim[bounds[4]][y][z][wire] = nil
|
||||
self[bounds[1]][y][z][wire] = nil
|
||||
self[bounds[4]][y][z][wire] = nil
|
||||
end
|
||||
end
|
||||
|
||||
for x = bounds[1]+1, bounds[4]-1, 2 do
|
||||
for y = bounds[2]+1, bounds[5]-1, 2 do
|
||||
sim[x][y][bounds[3]][wire] = nil
|
||||
sim[x][y][bounds[6]][wire] = nil
|
||||
self[x][y][bounds[3]][wire] = nil
|
||||
self[x][y][bounds[6]][wire] = nil
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -3,12 +3,13 @@ Wire = {
|
||||
logictype = 0
|
||||
}
|
||||
|
||||
function Wire.new(self, objref, layer, bounds)
|
||||
function Wire.new(self, objref, layer, bounds, sim)
|
||||
local o = {
|
||||
objref = objref,
|
||||
layer = layer,
|
||||
group = nil,
|
||||
bounds = bounds
|
||||
bounds = bounds,
|
||||
sim = sim,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
|
Loading…
x
Reference in New Issue
Block a user