   defp get_coord(%{x: _, y: _, z: _} = coord, axis) do
     get_coord(coord, String.to_atom(axis))
   end
+
+  defp move_abs(%{x: x, y: y, z: z, speed_x: sx, speed_y: sy, speed_z: sz} = k) do
+    SysCalls.log("Moving to (#{x},#{y},#{z}) @ speed (#{sx},#{sy},#{sz})")
+    SysCalls.move_absolute(x, y, z, sx, sy, sz)
+    k
+  end
+
+  def x, do: SysCalls.get_current_x()
+  def y, do: SysCalls.get_current_y()
+  def z, do: SysCalls.get_current_z()
 end

         args: %{label: "current_location"},
         kind: :special_value
       }) do
    get_coord(current_location(), axis)
  end

  # ???

  end

  def initial_state do
    [
      {"x", :=, x()},
      {"y", :=, y()},
      {"z", :=, z()},
      {"speed_x", :=, 100},
      {"speed_y", :=, 100},
      {"speed_z", :=, 100},
      {"safe_z", :=, false}
    ]
  end

  defp to_number(_axis, %{args: %{number: num}, kind: :numeric}), do: num
