gmod-lcpu/lua/entities/gmod_lcpu_cpu.lua

56 lines
1.4 KiB
Lua
Raw Normal View History

2023-07-24 06:50:18 -04:00
AddCSLuaFile()
DEFINE_BASECLASS("base_wire_entity") -- for now?
ENT.PrintName = "LCPU"
ENT.Author = "Lily <3"
-- no more, this deeply uses native APIs
if CLIENT then return end
function ENT:Initialize()
self:PhysicsInit(SOLID_VPHYSICS)
self:SetMoveType(MOVETYPE_VPHYSICS)
self:SetSolid(SOLID_VPHYSICS)
-- 64 kb of ram for now.
self.cpu = LCPUNative.CreateCPU(128 * 1024)
2023-07-27 17:04:56 -04:00
-- todo: cpu callbacks? once they become a thing
2023-07-25 06:46:52 -04:00
-- test device framework
-- (for once something works out how I wanted it to..)
self.test_device = LCPUNative.CreateDevice(0x11300000, 0x8)
self.test_device.register = 0x0
2023-07-25 06:46:52 -04:00
--function self.test_device:Clock()
--print("TestDevice Clock()")
--end
2023-07-25 06:46:52 -04:00
function self.test_device:Peek(address)
--print("peek @ " .. address)
if address == self.Base then return CurTime() end -- it a test!
if address == self.Base + 4 then return self.register end
return 0xffffffff
2023-07-25 06:46:52 -04:00
end
function self.test_device:Poke(address, value)
print("poke of address " .. address .. " -> " .. value)
if address == self.Base + 4 then
print("LUAREG write")
self.register = value
2023-07-25 06:46:52 -04:00
end
end
function self.test_device:Reset()
print("device was reset")
-- clear the register
self.register = 0
end
2023-07-25 06:46:52 -04:00
self.cpu:AttachDevice(self.test_device)
2023-07-24 06:50:18 -04:00
end
function ENT:Think()
--
if not self.cpu:PoweredOn() then return end
2023-07-24 06:50:18 -04:00
self.cpu:Cycle()
-- Even though this is gated by tickrate I'm just trying to be nice here
self:NextThink(CurTime() + 0.1)
end