diff --git a/sim/gate.lua b/sim/gate.lua index 2fd3030..2753989 100644 --- a/sim/gate.lua +++ b/sim/gate.lua @@ -58,8 +58,9 @@ function Gate.setportstate(gate, index, state) gate.port_states[index] = state if ((gate.port_net_state_num[index][0]>0) ~= (gate.port_net_state[index][0]==1)) and (gate.port_net_in_queue[index][0]==0) then - local group = gate.port_nets[index] - Simulation.queuegroup(GSim, group) + local net = gate.port_nets[index] + local cnet = net.c + Simulation.queuegroup_c(GSim, cnet) end end end diff --git a/sim/simulation.lua b/sim/simulation.lua index 63f7515..63851c8 100644 --- a/sim/simulation.lua +++ b/sim/simulation.lua @@ -284,10 +284,15 @@ function Simulation.queuegateinit(sim, gate) end -- Logic Critical -function Simulation.queuegroup(sim, net) - sim.groupqueue[sim.num_groupqueue+1] = net +function Simulation.queuegroup_c(sim, cnet) + sim.groupqueue[sim.num_groupqueue+1] = cnet sim.num_groupqueue = sim.num_groupqueue + 1 - net.in_queue[0] = 1 + cnet.in_queue[0] = 1 +end + +function Simulation.queuegroup(sim, net) + local cnet = net.c + Simulation.queuegroup_c(sim, cnet) end function Simulation.queuegroup_safe(sim, group) @@ -298,7 +303,7 @@ end function Simulation.dequeuegroup(sim, group) if group.in_queue[0]~=0 then - array_remove(sim.groupqueue, group, true) + array_remove(sim.groupqueue, group.c, true) sim.num_groupqueue = sim.num_groupqueue - 1 group.in_queue[0] = 0 end @@ -330,8 +335,7 @@ end -- Logic Critical function Simulation.ticklogic(sim) for i = 1, sim.num_groupqueue do - local net = sim.groupqueue[i] - local cnet = net.c + local cnet = sim.groupqueue[i] Group.update_c(cnet, sim.current_tick) cnet.in_queue[0] = 0 sim.groupqueue[i] = nil