mirror of
https://github.com/wiremod/wire.git
synced 2025-03-04 03:03:04 -05:00
Address busses can now have offsets to read/writes (#2852)
* Address busses can now have offsets to read/writes A feature previously only possible with the extended bus * offset to internal offset, read/write to external offset * Excessive parenthesis removed
This commit is contained in:
parent
52f823f9a6
commit
872272ce32
@ -18,25 +18,30 @@ function ENT:Initialize()
|
||||
self.Memory = {}
|
||||
self.MemStart = {}
|
||||
self.MemEnd = {}
|
||||
self.MemOffsets = {}
|
||||
for i = 1,4 do
|
||||
self.Memory[i] = nil
|
||||
self.MemStart[i] = 0
|
||||
self.MemEnd[i] = 0
|
||||
self.MemOffsets[i] = 0
|
||||
end
|
||||
self:SetOverlayText("Data rate: 0 bps")
|
||||
end
|
||||
|
||||
function ENT:Setup(Mem1st, Mem2st, Mem3st, Mem4st, Mem1sz, Mem2sz, Mem3sz, Mem4sz)
|
||||
function ENT:Setup(Mem1st, Mem2st, Mem3st, Mem4st, Mem1sz, Mem2sz, Mem3sz, Mem4sz, Mem1rw, Mem2rw, Mem3rw, Mem4rw)
|
||||
local starts = {Mem1st,Mem2st,Mem3st,Mem4st}
|
||||
local sizes = {Mem1sz,Mem2sz,Mem3sz,Mem4sz}
|
||||
local offsets = {Mem1rw,Mem2rw,Mem3rw,Mem4rw}
|
||||
for i = 1,4 do
|
||||
starts[i] = tonumber(starts[i]) or 0
|
||||
sizes[i] = tonumber(sizes[i]) or 0
|
||||
|
||||
self.MemStart[i] = starts[i]
|
||||
self.MemEnd[i] = starts[i] + sizes[i] - 1
|
||||
self.MemOffsets[i] = offsets[i] or 0
|
||||
self["Mem"..i.."st"] = starts[i]
|
||||
self["Mem"..i.."sz"] = sizes[i]
|
||||
self["Mem"..i.."rw"] = offsets[i]
|
||||
end
|
||||
end
|
||||
|
||||
@ -59,7 +64,7 @@ function ENT:ReadCell(Address)
|
||||
if self.Memory[i] then
|
||||
if self.Memory[i].ReadCell then
|
||||
self.DataBytes = self.DataBytes + 1
|
||||
local val = self.Memory[i]:ReadCell(Address - self.MemStart[i])
|
||||
local val = self.Memory[i]:ReadCell(Address + self.MemOffsets[i] - self.MemStart[i])
|
||||
return val or 0
|
||||
end
|
||||
else
|
||||
@ -77,7 +82,7 @@ function ENT:WriteCell(Address, value)
|
||||
if (Address >= self.MemStart[i]) and (Address <= self.MemEnd[i]) then
|
||||
if self.Memory[i] then
|
||||
if self.Memory[i].WriteCell then
|
||||
self.Memory[i]:WriteCell(Address - self.MemStart[i], value)
|
||||
self.Memory[i]:WriteCell(Address + self.MemOffsets[i] - self.MemStart[i], value)
|
||||
end
|
||||
end
|
||||
self.DataBytes = self.DataBytes + 1
|
||||
@ -95,4 +100,4 @@ function ENT:TriggerInput(iname, value)
|
||||
end
|
||||
end
|
||||
|
||||
duplicator.RegisterEntityClass("gmod_wire_addressbus", WireLib.MakeWireEnt, "Data", "Mem1st", "Mem2st", "Mem3st", "Mem4st", "Mem1sz", "Mem2sz", "Mem3sz", "Mem4sz")
|
||||
duplicator.RegisterEntityClass("gmod_wire_addressbus", WireLib.MakeWireEnt, "Data", "Mem1st", "Mem2st", "Mem3st", "Mem4st", "Mem1sz", "Mem2sz", "Mem3sz", "Mem4sz", "Mem1rw", "Mem2rw", "Mem3rw", "Mem4rw")
|
||||
|
@ -18,11 +18,17 @@ TOOL.ClientConVar[ "addrspace1st" ] = 0
|
||||
TOOL.ClientConVar[ "addrspace2st" ] = 0
|
||||
TOOL.ClientConVar[ "addrspace3st" ] = 0
|
||||
TOOL.ClientConVar[ "addrspace4st" ] = 0
|
||||
TOOL.ClientConVar[ "addrspace1rw" ] = 0
|
||||
TOOL.ClientConVar[ "addrspace2rw" ] = 0
|
||||
TOOL.ClientConVar[ "addrspace3rw" ] = 0
|
||||
TOOL.ClientConVar[ "addrspace4rw" ] = 0
|
||||
|
||||
if SERVER then
|
||||
function TOOL:GetConVars()
|
||||
return self:GetClientNumber( "addrspace1st" ), self:GetClientNumber( "addrspace2st" ), self:GetClientNumber( "addrspace3st" ), self:GetClientNumber( "addrspace4st" ),
|
||||
self:GetClientNumber( "addrspace1sz" ), self:GetClientNumber( "addrspace2sz" ), self:GetClientNumber( "addrspace3sz" ), self:GetClientNumber( "addrspace4sz" )
|
||||
self:GetClientNumber( "addrspace1sz" ), self:GetClientNumber( "addrspace2sz" ), self:GetClientNumber( "addrspace3sz" ), self:GetClientNumber( "addrspace4sz" ),
|
||||
self:GetClientNumber( "addrspace1rw" ), self:GetClientNumber( "addrspace2rw" ), self:GetClientNumber( "addrspace3rw" ), self:GetClientNumber( "addrspace4rw" )
|
||||
|
||||
end
|
||||
|
||||
-- Uses default WireToolObj:MakeEnt's WireLib.MakeWireEnt function
|
||||
@ -51,12 +57,16 @@ function TOOL.BuildCPanel(panel)
|
||||
WireToolHelpers.MakePresetControl(panel, "wire_addressbus")
|
||||
ModelPlug_AddToCPanel(panel, "gate", "wire_addressbus", nil, 4)
|
||||
|
||||
panel:NumSlider("1 offset", "wire_addressbus_addrspace1st", 0, 16777216, 0)
|
||||
panel:NumSlider("1 internal offset", "wire_addressbus_addrspace1st", 0, 16777216, 0)
|
||||
panel:NumSlider("1 size", "wire_addressbus_addrspace1sz", 0, 16777216, 0)
|
||||
panel:NumSlider("2 offset", "wire_addressbus_addrspace2st", 0, 16777216, 0)
|
||||
panel:NumSlider("1 external offset", "wire_addressbus_addrspace1rw", 0, 16777216, 0)
|
||||
panel:NumSlider("2 internal offset", "wire_addressbus_addrspace2st", 0, 16777216, 0)
|
||||
panel:NumSlider("2 size", "wire_addressbus_addrspace2sz", 0, 16777216, 0)
|
||||
panel:NumSlider("3 offset", "wire_addressbus_addrspace3st", 0, 16777216, 0)
|
||||
panel:NumSlider("2 external offset", "wire_addressbus_addrspace2rw", 0, 16777216, 0)
|
||||
panel:NumSlider("3 internal offset", "wire_addressbus_addrspace3st", 0, 16777216, 0)
|
||||
panel:NumSlider("3 size", "wire_addressbus_addrspace3sz", 0, 16777216, 0)
|
||||
panel:NumSlider("4 offset", "wire_addressbus_addrspace4st", 0, 16777216, 0)
|
||||
panel:NumSlider("3 external offset", "wire_addressbus_addrspace3rw", 0, 16777216, 0)
|
||||
panel:NumSlider("4 internal offset", "wire_addressbus_addrspace4st", 0, 16777216, 0)
|
||||
panel:NumSlider("4 size", "wire_addressbus_addrspace4sz", 0, 16777216, 0)
|
||||
panel:NumSlider("4 external offset", "wire_addressbus_addrspace4rw", 0, 16777216, 0)
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user